c# DllImport调用在一台计算机上抛出异常,但在另一台计算机上工作

本文关键字:一台 计算机 工作 DllImport 调用 抛出异常 | 更新日期: 2023-09-27 18:09:05

在运行以下引用非托管DLL(用C编写)的c#应用程序时,我得到一个带有以下信息的DllNotFound异常:

附加信息:无法加载DLL 'C:'Windows'System32'myLib.dll':无法找到指定的过程。(Exception from HRESULT: 0x8007007F)

我试过了:

  • 我已经验证了DLL存在于预期的路径中(事实上,当DLL不存在时,我得到一个不同的错误消息)
  • 我已经将exe和附带的dll复制到另一台计算机(在相同的路径中),它可以正常工作。
  • 我已经将DLL复制到System32目录(并在那里引用),正如某些其他答案所建议的。
  • 我已经检查了访问权限,并禁用了MS安全必需品。
  • 我已经确保了平台目标的匹配。

这是令人困惑的,因为加载DLL所需的依赖项似乎很少。

c# DllImport调用在一台计算机上抛出异常,但在另一台计算机上工作

不要将dll复制到系统文件夹。那是系统的,你不应该修改它。从它们所在的任何系统文件夹中删除这些dll。

相反,将dll放在与可执行文件相同的目录中。之后,需要的另一个步骤是确保任何依赖项(通常是VC运行时)都是可用的。根据您想要部署的方式,可能需要在任何目标机器上安装VC可重新发布包。

依赖项的旧版本(在本例中是Jungo DLL)没有导出与新版本相同的函数集,已经安装到出现错误的机器上。复制新版本解决了这个问题。

因此,虽然依赖文件在两台机器上都存在,但必要的导出函数集却没有。c#在DLL a上指定了"procedure could not found"错误,而从技术上讲,它是在依赖项的依赖项上。

Dependency walker被证明是非常有用的,它可以首先确定依赖项是什么,并指出其中一个依赖项中缺少一个导入。

相关文章: