如何确定应用程序是否是MFC程序?

时间:2008-10-08 14:35:36

标签: windows mfc

我有一个已编译的GUI应用程序。我需要了解它是否使用MFC库进行编程。 Depends.exe不会返回任何依赖于MFC42 * .dll。有没有工具可以获得有关可执行文件的其他信息? (如果可能的话,不仅仅是库,而是正在使用的编译器等。)

9 个答案:

答案 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的隐藏秘密。