dllimport无法定位dll文件,尽管它在路径中。

7
我使用[Dllimport(“DllName.dll”)],我确信进程的PATH环境变量中存在指向我的dll的路径,但仍然出现“找不到DllName.dll”的错误。

请检查目标平台(X86或x64或AnyCPU) - ihsani SAHBAZ
4个回答

14

"DllName.dll找不到"也可能意味着DllImport没有找到DllName.dll的其中一个依赖项。

使用Dependency Walker检查缺少哪个依赖项。


1
我曾经在我的C#应用程序中使用了const string lcms2Path = "C:\\lcms2.dll";,但最终将DLL文件移到BIN文件夹中后,这个[DllImport("lcms2.dll")]可以完美地工作。

1
我建议您使用FileMon(sysinternals.com)来检查您对库位置的假设是否正确。

1

DllImport在加载DLL时不会查找PATH环境变量。我相当确定,当通过名称引用DLL时,DllImport遵循本地程序加载本地DLL的标准规则。以下是详细说明这些规则的文章。

http://msdn.microsoft.com/en-us/library/ms682586.aspx

我发现最简单的加载DLL的方法就是将其放在我正在执行的程序相同的位置。


2
也许我误解了您的回答,但听起来不太对。我创建了一个简单的 asp.net web 应用程序,使用 DllImport 属性调用自定义 c++ dll 中的一个简单导出函数。如果不更新路径环境变量,我会收到 "无法加载 DLL" 异常。但是,当路径环境变量更新为包括 dll 路径时,我就可以正常调用外部函数了。 - Aaron Carlson
1
我这里也遇到了同样的问题。如果我使用 DllImport("sample.dll"),它就无法工作。但是如果我尝试 DllImport("C:\Somelocation\sample.dll"),它就可以工作。 - Lance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接