In MFC, wWinMain
定义于appmodul.cpp
。据我所知,该文件内置于 mfc90ud.dll 中。但是,当我运行我的应用程序时,调用堆栈显示MyApplication.exe!wWinMain
。它是如何采取的wWinMain
导出的函数appmodul.obj
并将其放入我的应用程序中?
在“解决方案资源管理器”窗口、“属性”、“链接器”、“命令行”中右键单击您的项目。在“其他选项”框中键入 /verbose。重建您的项目。输出窗口现在显示链接器找到符号的位置的跟踪。搜索“winmain”即可找到:
1> Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib\mfcs90ud.lib:
1> Found _wWinMain@16
1> Referenced in msvcrtd.lib(wcrtexew.obj)
1> Loaded mfcs90ud.lib(appmodul.obj)
注意库名称,mfcs90ud.lib 是静态链接库。如果您搜索“mfcs90ud.lib”,那么您还可以看到该库是如何被引用的:
1>Starting pass 1
1>Processed /DEFAULTLIB:mfc90ud.lib
1>Processed /DEFAULTLIB:mfcs90ud.lib
1>Processed /DEFAULTLIB:msvcrtd.lib
etc..
如果您在 MFC 源代码中搜索“mfcs”,您将发现这个 /defaultlib 选项是如何注入的。来自 afx.h:
#ifdef _DEBUG
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib")
#else
#pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib")
#pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib")
#endif
长话短说,一个 MFC 应用程序链接两个库。 Mfc90u.lib是MFC DLL版本的导入库。 Mfcs90u.lib 是一个静态链接库,其中包含链接到可执行文件中的位。包括WinMain()。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)