我有一个包含非托管C ++ API代码的dll库,需要在.NET 4.0应用程序中使用。但是我尝试加载dll的每种方法都出现错误:
无法加载DLL'MyOwn.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)
我已经阅读并尝试了在互联网上找到的许多解决方案。什么都没用..
我尝试使用以下方法:
[DllImport("MyOwn.dll", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs((UnmanagedType.I4))]
public static extern Int32 MyProIni(string DBname, string DBuser_pass,
string WorkDirectory, ref StringBuilder ErrorMessage);
[当我尝试遵循this article并运行本示例(从下载的代码中)时,它运行没有问题(所使用的dll在bin / debug文件夹中)
我已将我的dll(连同它所依赖的所有文件一起复制到我的bin文件夹中。)>
我也尝试过这种方法,但是出现了相同的错误:
[DllImportAttribute(MyOwnLibDllPath, EntryPoint="TMproIni")] [return: MarshalAs(UnmanagedType.I4)] public static extern int MyproIni(string DBname, string DBuser_pass, string WorkDirectory, ref StringBuilder ErrorMessage);
有什么建议吗?
我有一个包含非托管C ++ API代码的dll库,需要在.NET 4.0应用程序中使用。但是我尝试加载dll的每种方法都出现错误:无法加载DLL'MyOwn.dll':指定的模块...
根据我在Windows上的记忆,dll的搜索顺序为:
如果DLL和.NET项目位于同一解决方案中,并且您希望每次都编译并运行它们,则可以右键单击.NET项目的属性Build事件,然后在Post-构建事件命令行:
当我将应用程序部署到测试PC时,我遇到了同样的问题。问题是开发PC具有msvcp110d.dll
和msvcr110d.dll
,但没有测试PC。
在我的情况下,一个不受管理的dll依赖于另一个丢失的dll。在这种情况下,错误将指向现有的dll,而不是缺少的dll,这可能会造成混淆。
Setup
我遇到了相同的问题,就我而言,我有两台32位PC。一台已安装.NET4.5,另一台是新PC。
[在c#环境中使用不受管理的c / c ++ dll文件时,也会遇到相同的问题。
[。Net Framework +4中导入C ++ Dll时遇到相同的问题,我未选中Project-> Properties-> Build-> Prefer 32-bit,它为我解决了。
您可以使用dumpbin工具找出所需的DLL依赖项:
这是一个'kludge'但是
尝试输入dll的完整路径。如果不起作用,请尝试将dll复制到system32文件夹。
DLL必须在bin文件夹中。
确保您自己的dll的所有依赖关系都存在于dll附近或System32
中。
[有一件非常有趣的事(并且与技术相关)可能会浪费您的时间,因此请考虑在此处共享它-
打开融合日志记录,请参阅this question,以获取有关如何执行此操作的大量建议。调试混合模式应用程序的加载问题可能会很痛苦。融合日志记录可以提供很大的帮助。
请确保将Build Platform Target设置为x86或x64,以便它与您的DLL兼容-DLL可能是为32位平台编译的。