我正在使用Boost Python为C++项目编写Python接口,如果缺少DLL,Python会给出一个非常不友好的错误消息:
ImportError: DLL load failed: 找不到指定的模块。
根据此网站的说法,无法显示更多信息。
现在,最大的问题是,我们不能使用依赖项检查器或dumpbin,因为我们需要能够通过编程方式确定缺少哪个DLL。好消息是,我们只需要检查第一层依赖关系。因此,如果my.exe依赖于a.dll、b.dll和c.dll,那么这就是我们感兴趣的DLL集合。如果a、b和c都在它们应该在的地方,那么我的工作就完成了。
我已经找到了这个MSDN页面上枚举正在运行的进程,但是无法找到如何对非运行中的.exe或未加载的.dll执行此操作。我最接近的一篇文章是关于LoadLibraryEx函数的MSDN文章*。然而,我无论如何都无法弄清楚如何从返回的HMODULE获取依赖项表。所以,64,000美元的问题是:我如何从HMODULE获取.exe/.dll依赖项?更好的问题是:那是我获取依赖项的地方吗?如果不是,那么我在哪里可以找到它?
最理想的解决方案是使用C ++,但我们也很乐意使用Python解决方案。任何帮助或建议都将不胜感激。谢谢。
*我会链接这篇文章,但我的声望还不够高,无法在一个问题中发布两个链接。 :)
HMODULE
对象的存在(与NULL
不同),意味着dll已经成功加载,因此无法使用HMODULE
。 - CristiFati