gpt4 book ai didi

c++ - MFC winMain 如何在可执行文件中结束?

转载 作者:可可西里 更新时间:2023-11-01 13:28:26 37 4
gpt4 key购买 nike

在MFC中,wWinMain定义在appmodul.cpp中。据我所知,该文件内置于 mfc90ud.dll 中。但是,当我运行我的应用程序时,调用堆栈显示 MyApplication.exe!wWinMain。它如何获取在 appmodul.obj 中导出的 wWinMain 函数并将其放入我的应用程序中?

最佳答案

在“解决方案资源管理器”窗口、“属性”、“链接器”、“命令行”中右键单击您的项目。在“其他选项”框中键入/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 选项是如何被注入(inject)的。来自 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()。

关于c++ - MFC winMain 如何在可执行文件中结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871836/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com