【发布时间】:2017-02-05 23:02:56
【问题描述】:
在运行以下引用非托管 DLL(用 C 编写)的 C# 应用程序时,我得到一个带有以下信息的 DllNotFound 异常:
附加信息:无法加载 DLL 'C:\Windows\System32\myLib.dll':找不到指定的过程。 (HRESULT 异常:0x8007007F)
我的尝试:
- 我已验证 DLL 存在于预期路径中(事实上,当 DLL 不存在时,我会收到不同的错误消息)
- 我已将 exe 和随附的 dll 复制到另一台计算机(在同一路径中),它可以正常运行。
- 按照此处某些其他答案的建议,我已将 DLL 复制到 System32 目录(并在那里引用它)。
- 我仔细检查了访问权限,并禁用了 MS Security Essentials。
- 我已确保平台目标匹配。
这令人费解,因为加载 DLL 所需的依赖项似乎很少。
【问题讨论】:
-
两台电脑的操作系统是什么?
-
DLL 对其他 DLL(可能是运行时库)的依赖关系如何?
-
这是一个基本的 DLL Hell 问题。它找到了您要使用的 DLL 并毫无问题地加载它,但它没有您要调用的函数。部署您在开发机器上使用的完全相同文件。假设你在你的开发机器上正确地测试了它,永远不要跳过它。使用 DLL 上的 Dumpbin.exe /exports 进行另一种验证方式。
-
@HansPassant ,如果我有代表,我会支持你的评论。部署完全相同的依赖 DLL 帮助我找到了解决方案。