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

4

我有一个已编译的GUI应用程序。我需要知道它是否使用了MFC库进行编程。Depends.exe没有返回任何对MFC42*.dll的依赖项。是否有任何工具可以获取关于可执行文件的其他信息?(如果可能不仅限于库,还包括所使用的编译器等)


你可以检查可执行文件中是否包含任何<a href="http://msdn.microsoft.com/en-us/library/fy6fte8a(VS.71).aspx">标准MFC资源</a>。 - Mark Ransom
8个回答

3

如果应用程序使用MFC编写,它通常由窗口组成,这些窗口的类名Afx:字符串为前缀。

如果您可以访问Spy++实用程序,则非常容易查询任何可执行文件的类名详细信息。


2

如果你担心的应用程序是动态链接到MFC的,那么它将依赖于MFCXX.dll,其中XX是版本号。例如,我们的应用程序依赖于MFC80.dll。

但是,如果应用程序是静态链接的,所有MFC的源代码都将直接编译到应用程序中。


我在问题中已经说过了,它不返回任何依赖项。而且我认为MFC应用程序可以静态构建。 - Serkan
如果 MFC 静态链接到应用程序,则不需要。 - Ferruccio

2

同时请注意,MFC应用程序可能已经静态链接到MFC库,而不是使用共享库 - 静态链接的MFC应用程序在Depends中不会显示对MFCXXX.dll的依赖关系。


2

如果它是静态链接的,dumpbin是您想要的工具。 MFC符号往往被命名为“...Afx...”或“...MFC...”,因此如果您看到这些符号,它可能正在使用MFC。此实用程序还可以告诉您链接器版本,编译的操作系统等信息。


1
你可以尝试在文件上运行dumpbin实用程序(SDK或VS安装的一部分)。
如果你运行“dumpbin /exports”,你可以寻找任何MFC特征。但我不确定是否会有,所以这个测试只能确认MFC是静态链接的,而不能否认它。

1
如果您可以运行该应用程序,请先将其运行,然后使用Sysinternals工具ProcessExplorer查看已加载的DLL。
或者您需要一种编程方式来确定应用程序是否正在使用MFC? 另外,我有点惊讶Depends没有显示您期望的内容。请将Depends输出与ProcessExplorer进行比较,并查看您可以学到什么。

0

SysInternals(最近被微软收购)发布了depends。无论是动态链接到DLL还是静态链接,您都会看到引用的导入/导出符号(可能对于C++入口点签名进行了混淆)。

该工具还非常有助于检测循环引用(使用依赖树)。在那些极为罕见的情况下,当您绝对确定导出了入口点但链接器仍然失败时,您可以检查DLL以查找“缺失”的入口点。

此外,它还有助于发现DLL的隐藏秘密。


0
Babak Farrokhi曾经编写了一个非常方便的小程序,名为“Language 2000”,它可以扫描exe文件,查找库和框架二进制签名。它可以轻松检测静态链接的MFC程序。 不过,这个程序在我几年前使用时已经有些老旧了。你需要检查一下网上是否有更新版本或者这个签名是否仍然有效。谁知道呢!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接