如何在C++或Python中编程地列出一个DLL的依赖关系?

2024-04-29 16:22:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在使用PosithPython为C++项目编程Python接口。问题是,如果DLL丢失,Python会给我们一个非常无用的错误消息:

ImportError: DLL load failed: The specified module could not be found.

根据this site的说法,不可能显示比这更多的信息。在

现在,大问题。我不能使用依赖性查询器或dumpbin,因为我们需要能够以编程方式确定缺少哪个DLL。好消息是我们只需要检查第一级的依赖关系。所以,如果我的.exe依赖于a.dll、b.dll和c.dll,那么这是我们唯一感兴趣的dll集。如果a,b,c都在应该的位置,那么我的工作就完成了。在

我已经找到this MSDN page on enumerating for a running process,但无法找到如何对未运行的.exe或已卸载的.dll执行此操作。最接近我的是一篇关于LoadLibraryEx函数*的MSDN文章。但是,我一辈子都不知道如何从返回的HMODULE获取依赖表。在

所以,64000美元的问题是:如何从HMODULE获取.exe/.dll依赖项?一个更好的问题是:这就是我得到依赖关系的地方吗?如果没有,我在哪里能找到它?在

<>最好的解决方案是C++,但是我们也很高兴有一个Python解决方案。任何帮助或建议将不胜感激。谢谢。在

*我会链接文章,但我的代表不够高,不能在一个问题中发布两个链接。:)


Tags: 项目消息关系链接编程错误文章解决方案
1条回答
网友
1楼 · 发布于 2024-04-29 16:22:27

您需要读取模块的可移植可执行头(PE头)。这是一个描述导入、导出、重新定位、节、资源、代码、静态数据和二进制文件所依赖的所有其他内容的结构。虽然可以直接解析,但是PE头结构有很多不明显的古怪和细微差别。我建议使用像PeLib这样的库来为您处理所有事情。在

相关问题 更多 >