我有一个已编译的GUI应用程序。我需要了解它是否使用MFC库进行编程。 Depends.exe不会返回任何依赖于MFC42 * .dll。有没有工具可以获得有关可执行文件的其他信息? (如果可能的话,不仅仅是库,而是正在使用的编译器等。)
答案 0 :(得分:2)
还要注意MFC应用程序可能已静态链接到MFC库而不是使用共享库 - 静态链接的MFC应用程序不会显示依赖于MFCXXX.dll作为依赖的直接依赖。
答案 1 :(得分:1)
如果您关注的应用程序动态链接到MFC,它将依赖于MFCXX.dll,其中XX是版本号。例如,我们的应用程序依赖于MFC80.dll。
但是,如果应用程序是静态链接的,MFC的所有源代码都将直接编译到应用程序中。
答案 2 :(得分:1)
如果您可以运行该应用程序,请让它运行,然后使用Sysinternals工具ProcessExplorer查看加载的DLL。
或者您是否需要以编程方式确定应用是否使用MFC? 此外,我有点惊讶,Depends没有表现出你的期望。将Depends输出与ProcessExplorer进行比较,看看你能学到什么。
答案 3 :(得分:1)
您可以检查可执行文件中是否有Standard MFC Resources。
答案 4 :(得分:1)
dumpbin是你想要的工具,如果它是静态链接的。 MFC符号往往被命名为'... Afx ...'或'... MFC ...',所以如果你看到它们,它可能使用MFC。该实用程序还可以告诉您链接器版本,它编译的操作系统等等。
答案 5 :(得分:1)
如果应用程序是使用 MFC 编写的,它通常由具有类名的窗口组成,前缀为 Afx:字符串。
如果您可以访问 Spy ++ 实用程序,则可以轻松查询任何可执行文件的类名称详细信息。
答案 6 :(得分:0)
您可以尝试在文件上运行dumpbin实用程序(SDK的一部分或VS安装)。
如果您运行“dumpbin / exports”,您可以查找任何告知MFC-isms。我不确定是否会有,所以测试只能确认MFC是静态链接的,而不是反驳它。
答案 7 :(得分:0)
Babak Farrokhi曾经写过一个非常方便的小程序,名为“Language 2000”,它扫描exes寻找库和框架二进制签名。它用于检测两个手指向上的静态链接的MFC程序。 几年前,当我使用它时,该程序已经很老了。您必须检查Web是否有更新的版本,或者签名是否仍然有效。谁知道!
答案 8 :(得分:0)
SysInternals(最近由微软购买)发布取决于。无论它是动态链接到DLL还是静态链接,您都会看到引用的导入/导出符号(可能会因C ++入口点签名而受到损坏)。
此工具对于检测循环引用(使用依赖关系树)也非常有用。在极少数情况下,当您完全确定导出入口点但链接器仍然失败时,您可以检查DLL是否存在“缺失”入口点。
还有助于发现DLL的隐藏秘密。