C# 无法在C中加载DLL#

C# 无法在C中加载DLL#,c#,dll,dllimport,C#,Dll,Dllimport,如何在c#项目中加载dll 错误: [DllImport("Reader.dll")] public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port); 无法加载DLL“Reader.DLL”:无法加载指定的模块 建立(来自HRESULT的异常:0x8007007E) 代码示例: [DllImport("Reader.dll")] public static extern byte

如何在c#项目中加载dll

错误

[DllImport("Reader.dll")]
 public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);
无法加载DLL“Reader.DLL”:无法加载指定的模块 建立(来自HRESULT的异常:0x8007007E)

代码示例

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

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

如果问题确实是“找不到”,那么使用Sysinternals中的ProcMon将显示系统在哪里查找DLL

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


隔离问题的一种方法是创建一个加载DLL的简单C/C++项目。(如果您无法访问导入库,请使用LoadLibrary动态加载它。)然后使用Dependency Walker评测测试线束,它将报告缺少的DLL的名称。

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


尽管reader.dll无法加载GPSVC.dll和IESHIMS.dll。 通过在application.exe上运行corflags命令,我成功地使其工作 应用程序现在标记为32位

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


版本:v4.0.30319

CLR标头:2.5

PE:PE32

CorFlags:3

I:1

32位:1


:0(

> P>)解决方案是在客户端机器上安装C++可重分配X64。 (微软Visual C++可重新分配VisualStudio 2015, 2017和2019)

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

您可以在此处找到下载链接:


可能是一个明显的问题,但dll确实存在?是的,它存在。事实上,如果尝试添加引用,我选择dll作为目标。我面临以下错误:无法添加对c:\…\reader.dll的引用您无法添加对dll的引用,因为它不是.NET程序集。这与你的问题无关。尝试使用dependency Walker调试您的问题reader.dll是c/c++库吗?它本身是否有可能找不到的依赖项?它是一个可以注册的com库吗?如果是,它会注册吗?@Alex GPSVC=Group Policy ServiceTHank you@Will I在64位机器上,调试设置为“x86”。它是Visual C++ 6 DLL,运行依赖性Walk显示了2个缺失的DLL:GPSVC.dll和iSim.dll。有什么想法吗?@john你解决过这个问题吗?我遇到了同样的问题,可能需要更多的想法来调试它。谢谢!(GPSVC.dll和IESHIMS.dll)@M3NTA7请检查我接受的答案。GPSVC.dll和IESHIMS.dll不是问题所在。在我的例子中,这是一个x64/x86问题。注意:检查dll是否在调试文件夹中。将您的项目编译为x86(也许您不需要使用coreflags,以x86运行即可)。