MFC的wWinMain如何以可执行文件结束?

Mar*_*ram 5 c++ windows mfc winmain

在MFC中,wWinMain定义于appmodul.cpp.我所看到的这个文件内置在mfc90ud.dll中.但是,当我运行我的应用程序时,调用堆栈显示MyApplication.exe!wWinMain.如何将wWinMain导出的函数appmodul.obj放入我的应用程序中?

Han*_*ant 10

在"解决方案资源管理器"窗口,"属性","链接器","命令行"中右键单击项目 在"其他选项"框中键入/详细.重建您的项目."输出"窗口现在显示链接器找到符号的位置的跟踪.搜索"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)
Run Code Online (Sandbox Code Playgroud)

请注意库名称,mfcs90ud.lib是一个静态链接库.如果您搜索"mfcs90ud.lib",那么您还可以看到该库是如何被引用的:

1>Starting pass 1
1>Processed /DEFAULTLIB:mfc90ud.lib
1>Processed /DEFAULTLIB:mfcs90ud.lib
1>Processed /DEFAULTLIB:msvcrtd.lib
etc..
Run Code Online (Sandbox Code Playgroud)

如果在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
Run Code Online (Sandbox Code Playgroud)

长话短说,一个MFC应用程序链接两个库.Mfc90u.lib是MFC的DLL版本的导入库.Mfcs90u.lib是一个静态链接库,包含链接到可执行文件的位.包括WinMain().