如何在c#项目中加载dll
错误:
无法加载DLL'Reader.dll':指定的模块无法加载 找到。 (HRESULT异常:0x8007007E)
代码示例:
[DllImport("Reader.dll")]
public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);
图像:
答案 0 :(得分:11)
如果问题确实“无法找到”,那么使用Sysinternals的ProcMon将显示系统在哪里寻找DLL。
然而,通常这些异常意味着“我找到了DLL但我无法加载它”,这可能是因为缺少DLL的依赖而不是DLL本身,或者因为DLL与DLL不兼容该应用程序试图加载它。如果您的C#应用程序设置为“任何CPU”并且您使用的是64位计算机,则在加载非托管32位DLL时会出现此类错误。
隔离问题的一种方法是创建一个加载DLL的简单C / C ++项目。 (如果您无权访问导入库,请使用LoadLibrary动态加载它。)然后使用Dependency Walker分析测试工具,它将报告缺少的DLL的名称。
答案 1 :(得分:2)
虽然reader.dll无法加载GPSVC.dll和IESHIMS.DLL。 我设法通过在application.exe上运行corflags命令使其工作 该应用程序现在标记为32位:
corflags application.exe /32bit+
版本:v4.0.30319
CLR标题:2.5
PE:PE32
CorFlags:3
非法:1
32BIT:1
签名:0
答案 2 :(得分:1)
如果它是一个简单的C DLL,它只需要与.exe。
位于同一个文件夹中答案 3 :(得分:1)
我在另一篇文章中发现了这一点。也许它会对你的情况有所帮助
答案 4 :(得分:0)
对我来说,解决方案是在客户端机器上安装 C++ Redisstrable X64。 (适用于 Visual Studio 2015、2017 和 2019 的 Microsoft Visual C++ Redistributable。)
dll 已经在正确的位置,与 .exe 文件位于同一文件夹中。
您在这里找到了下载链接: