如何以编程方式查找DLL无法加载的原因?

时间:2016-07-25 08:28:05

标签: c++ winapi visual-c++ dll loadlibrary

我的C ++程序调用{​​{1}}来加载第三方DLL。结果是一个空句柄 - 它无法加载。对LoadLibraryEx()的调用之后返回零,这不是很有用,但至少它不是一个丢失的DLL文件。

代码如下:

GetLastError()

我无法访问该计算机 - 我只能在那里部署代码并观察上传到网络存储中的日志。

我如何以编程方式找到DLL无法加载的原因?

3 个答案:

答案 0 :(得分:0)

可能你的dll可以找到,但它依赖于远程机器上找不到的dll。

如果您不能使用Dependency Walker,那么您可以尝试使用如下文章所述的技术:

How to determine a windows executables DLL dependencies programatically?

答案 1 :(得分:0)

好的,所以我检查得更好 - 确实还有另一个WinAPI调用导致在ListView之后覆盖“上一个错误”。它隐藏在几层C ++辅助对象的深处,所以我之前没有注意到它。所以这是调用者代码中的一个错误,真正的“最后一个错误”是非零的。

答案 2 :(得分:-1)

看起来问题很可能是第三方软件已经安装了钩子或其他防病毒措施,钩子可能是错误的,并且没有设置正确的最后错误代码。

作为故障排除措施,您应该尝试LdrLoadDll而不是LoadLibraryEx。

请注意,这是一个未记录的内部函数,因此您可能不希望在生产代码中使用它,但这将是一个有用的故障排除步骤,因为它应该产生更有用的错误代码。