无法在C#中加载DLL

问题描述 投票:3回答:4

如何在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 dllimport
4个回答
11
投票

如果问题确实“无法找到”,那么使用Sysinternals的ProcMon将显示系统在哪里寻找DLL。

但是,通常这些异常意味着“我找到了DLL,但我无法加载它”,这可能是因为DLL的依赖性缺失而不是DLL本身,或者因为DLL与应用程序尝试不兼容加载它。如果您的C#应用​​程序设置为“任何CPU”并且您使用的是64位计算机,则会在加载非托管32位DLL时出现此类错误。

解决问题的一种方法是创建一个加载DLL的简单C / C ++项目。 (如果您无权访问导入库,则使用LoadLibrary动态加载它。)然后使用Dependency Walker分析测试工具,它将报告缺少的DLL的名称。


2
投票

虽然reader.dll无法加载GPSVC.dll和IESHIMS.DLL。我设法通过在application.exe上运行corflags命令使其工作,应用程序现在标记为32位:


corflags application.exe /32bit+

版本:vh.0.30319

CLR标题:2.5

PE:PE32

CorFlags:3

非正式:1

32位:1

签名:0


1
投票

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

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


1
投票

如果它是一个简单的C DLL,它只需要与.exe位于同一个文件夹中。

© www.soinside.com 2019 - 2024. All rights reserved.