在P / Invoking中找不到DLL时,如何获取有关缺少的特定非托管DLL的消息?

时间:2008-11-06 15:44:14

标签: pinvoke

当你链接到一个非托管库(比如'A.dll')而这个库反过来链接到另一个库('B.dll'),并且缺少B.dll时,你会得到一个运行时错误消息无法加载'B.dll'。

但是当您从托管代码P / Invoke到'A.dll'时,您将获得此表单的一般例外:

未处理的异常:System.DllNotFoundException:无法加载DLL“A.dll”:找不到指定的模块。

当从托管代码调用时,如何获取一条错误消息,指出无法加载的特定非托管dll文件?

4 个答案:

答案 0 :(得分:4)

我不认为您可以使用任何特定的API来查明“A.dll”的LoadLibrary(基础Win32 API)失败的原因。我建议使用Dependency Walker之类的工具来解决DLL加载错误。

答案 1 :(得分:0)

我不知道你怎么能以异常的形式得到这个。当我遇到这个问题时,我通常会尝试用depends.exe打开DLL。它非常好,如果简单地从它的当前位置加载DLL,则报告缺少依赖关系。

答案 2 :(得分:0)

您将无法从异常中获得答案,但您可以通过Process Monitor完成(通过大量工作)。本文讨论了如何以及还包括扫描Process Monitor日志以查找特定问题的工具。

http://tech.blinemedical.com/debug-could-not-load-file-or-assembly-or-one-of-its-dependencies/

答案 3 :(得分:0)

Fusion Log Viewer是调试.NET应用程序中的程序集加载问题的好工具。

要识别常规文件加载问题,可以使用Process Monitor。