如何在C#项目无法加载DLL在C#
错误加载DLL:无法加载DLL“Reader.dll”:指定的模块找不到。 (从HRESULT异常:0x8007007E)
代码示例:
[DllImport("Reader.dll")] public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);
图像:
如何在C#项目无法加载DLL在C#
错误加载DLL:无法加载DLL“Reader.dll”:指定的模块找不到。 (从HRESULT异常:0x8007007E)
代码示例:
[DllImport("Reader.dll")] public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);
图像:
虽然reader.dll是无法加载GPSVC.dll和IESHIMS.DLL。 我设法让它通过运行corflags上工作application.exe 命令应用现在被标记为32位:
corflags application.exe /32bit+
版本:v4.0.30319
CLR头:2.5
PE:PE32
个CorFlags:3
ILONLY:1
32BIT:1
签名:0
如果问题确实是“找不到”,那么使用Sysinternals的ProcMon会向您显示系统正在查找DLL的位置。
但是,通常这些类型的异常意味着“我找到了DLL但我无法加载它”,这可能是因为DLL的依赖关系丢失而不是DLL本身,或者因为DLL不兼容与应用程序试图加载它。如果您的C#应用程序设置为“任何CPU”,并且您位于64位计算机上,则加载非托管32位DLL时会出现此类错误。
解决问题的一种方法是创建一个加载DLL的简单C/C++项目。 (如果您无权访问导入库,请使用LoadLibrary动态加载它。)然后使用Dependency Walker分析测试工具,并报告缺少的DLL的名称。
谢谢你@我会在64位机器上,调试是为'x86'设置的。它是一个可视化的C++ 6.0 DLL,运行依赖关系的步行者显示2缺少DLL:GPSVC.dll和IESHIMS.DLL。有任何想法吗? – john 2012-02-16 23:47:40
@john你有没有得到这个解决?我遇到了同样的事情,可以使用一些更多的想法来调试。谢谢! (GPSVC.dll和IESHIMS.DLL) – M3NTA7 2012-05-03 22:04:56
@ M3NTA7请检查我接受的答案。 GPSVC.dll和IESHIMS.DLL不是问题。在我的情况下,这是一个x64/x86问题。作为想法的 :检查你的dll是否在调试文件夹中。把你的项目编译为x86(也许你不需要使用coreflags,像x86一样运行就可以完成这项工作)。 – john 2012-05-04 08:31:38
我在其他帖子中发现了这个。也许这会帮助你的情况
可能明显的问题,但是该dll当然实际存在? – 2012-02-16 23:12:40
是的,它是存在的。事实上,如果尝试添加引用,我选择dll作为目标。我面对这个错误:无法添加对c:\ ... \ reader.dll的引用 – john 2012-02-16 23:17:37
您不能添加对dll的引用,因为它不是.NET程序集。它与你的问题无关。 尝试使用依赖关系Walker来调试您的问题http:// www。dependencywalker.com/ – Terkel 2012-02-16 23:21:07