我有一个已编译的GUI应用程序。我需要知道它是否使用了MFC库进行编程。Depends.exe没有返回任何对MFC42*.dll的依赖项。是否有任何工具可以获取关于可执行文件的其他信息?(如果可能不仅限于库,还包括所使用的编译器等)
如果应用程序使用MFC编写,它通常由窗口组成,这些窗口的类名以Afx:字符串为前缀。
如果您可以访问Spy++实用程序,则非常容易查询任何可执行文件的类名详细信息。
如果你担心的应用程序是动态链接到MFC的,那么它将依赖于MFCXX.dll,其中XX是版本号。例如,我们的应用程序依赖于MFC80.dll。
但是,如果应用程序是静态链接的,所有MFC的源代码都将直接编译到应用程序中。
同时请注意,MFC应用程序可能已经静态链接到MFC库,而不是使用共享库 - 静态链接的MFC应用程序在Depends中不会显示对MFCXXX.dll的依赖关系。
如果它是静态链接的,dumpbin是您想要的工具。 MFC符号往往被命名为“...Afx...”或“...MFC...”,因此如果您看到这些符号,它可能正在使用MFC。此实用程序还可以告诉您链接器版本,编译的操作系统等信息。
SysInternals(最近被微软收购)发布了depends。无论是动态链接到DLL还是静态链接,您都会看到引用的导入/导出符号(可能对于C++入口点签名进行了混淆)。
该工具还非常有助于检测循环引用(使用依赖树)。在那些极为罕见的情况下,当您绝对确定导出了入口点但链接器仍然失败时,您可以检查DLL以查找“缺失”的入口点。
此外,它还有助于发现DLL的隐藏秘密。