我有一个包含非托管C++应用程序接口代码的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);
有什么建议吗?
发布于 2012-01-25 21:11:22
根据我在Windows上的记忆,dll的搜索顺序是:
C:\windows\system32 or c:\windows\SysWOW64
(适用于64位计算机上的32位进程)。Path
环境变量读取
此外,我还会检查DLL的依赖项,Visual Studio提供的依赖项遍历程序可以在这里帮助您,它也可以免费下载:http://www.dependencywalker.com
发布于 2014-09-05 19:34:25
您可以使用转储工具找出所需的DLL依赖项:
dumpbin /DEPENDENTS my.dll
这将告诉您DLL需要加载哪些DLL。特别要注意MSVCR*.dll。我已经看到您的错误代码发生在正确的视觉C++可再发行版没有安装。
你可以从微软网站上获得"Visual Studio2013的Visual C++可再发行软件包“。它安装c:\windows\system32\MSVCR120.dll
在文件名中,120 = 12.0 = Visual Studio 2013。
请注意,您有正确的Visual Studio版本(10.0 = VS 10,11 = VS 2012,12.0 = VS 2013...)正确的体系结构(x64或x86)适合您的动态链接库的目标平台,而且您还需要小心调试构建。动态链接库的调试版本依赖于MSVCR120d.dll,它是库的调试版本,随Visual Studio一起安装,但不是由可再发行软件包安装。
发布于 2016-03-04 13:28:35
DLL必须在bin文件夹中。
在Visual Studio中,我将dll添加到项目中,而不是在引用中,而是在“添加现有文件”中。然后将dll的"Copy to Output Directory“属性设置为"Copy if newer”。
https://stackoverflow.com/questions/9003072
复制相似问题