无法在C#中加载DLL

时间:2012-02-16 23:05:40

标签: c# dll dllimport

如何在c#项目中加载dll

错误

  

无法加载DLL'Reader.dll':指定的模块无法加载   找到。 (HRESULT异常:0x8007007E)

代码示例

[DllImport("Reader.dll")]
 public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);

图像: exception screenshot

5 个答案:

答案 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)

我在另一篇文章中发现了这一点。也许它会对你的情况有所帮助

NUnit "missing" GPSVC.DLL on Windows 7/64

答案 4 :(得分:0)

对我来说,解决方案是在客户端机器上安装 C++ Redisstrable X64。 (适用于 Visual Studio 2015、2017 和 2019 的 Microsoft Visual C++ Redistributable。)

dll 已经在正确的位置,与 .exe 文件位于同一文件夹中。

您在这里找到了下载链接:

https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0