C++ m_pMainWnd在CWinApp中为NULL,因为未调用InitInstance

C++ m_pMainWnd在CWinApp中为NULL,因为未调用InitInstance,c++,mfc,visual-studio-2019,C++,Mfc,Visual Studio 2019,我试图使用MFC创建一个简单的窗口,但是程序立即终止,调试的输出行似乎很奇怪: d:\agent\_work\3\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\appcore.cpp(783) : AppMsg - Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application. 在进一步检查之后,我意识到没有调用CMyFrame::InitInstance。我有一些与MFC相关的经验,

我试图使用MFC创建一个简单的窗口,但是程序立即终止,调试的输出行似乎很奇怪:

d:\agent\_work\3\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\appcore.cpp(783) : AppMsg - Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.
在进一步检查之后,我意识到没有调用CMyFrame::InitInstance。我有一些与MFC相关的经验,因为我在Code::Blocks中使用过Win32++aka Win32xx。现在我正在使用官方的MFC框架尝试VSCommunity2019,但我无法创建一个空白窗口。以下是完整的代码:

//main.cpp //代码取自: //www.tutorialspoint.com/mfc/mfc_windows_fundamentals.htm 包括 包括 类别CMY框架:公共CFrameWnd{ 公众: CMY框架{ CreateNULL,_TMFC应用程序教程; } }; C类示例:公共CWinApp{ 公众:
CExample{std::cout此源代码来自何处?它似乎不是由Visual Studio自动生成的,因为它没有意义

MFC不使用main,调用CWinApp的run方法也不会启动MFC应用程序

请参阅有关run方法的文档,该方法表示它启动了消息泵。这意味着您的应用程序没有进行任何设置环境所需的初始化,以便消息泵能够正确地处理消息

Run获取和分发Windows消息,直到应用程序 接收WM_退出消息。如果应用程序的消息队列 当前不包含消息,请运行OnIdle调用以执行空闲时间 正在处理。传入消息将转到PreTranslateMessage成员 函数进行特殊处理,然后转到Windows函数 用于标准键盘翻译的TranslateMessage;最后 调用DispatchMessage窗口函数

Run很少被重写,但您可以重写它以提供特殊的 行为


允许Visual Studio为MFC应用程序生成适当的框架,该框架将为该应用程序创建必要的入口点,链接所有适当的库,初始化MFC运行时环境,并启动消息泵以开始处理消息。

您的代码基本正常,这看起来像是project的问题在MFC程序中,你不需要int main。你只需放上cEnthEpapp;它将间接调用WINMANE入口点。但是你可能已经设置了一个控制台程序,并且发生了一些奇怪的事情。创建一个新的项目:C++ + -MFC:MFC应用程序>基于对话框的应用程序。复制/粘贴上面的代码到CWINAPP/ CWin文件中。AppEx类。您将无法在标准MFC应用程序中使用std::cout,请改用TRACE。谢谢,让VS从其自己的模板创建项目使其工作。谢谢。使用Visual Studio模板“MFC应用程序”创建项目使其工作。我想从现在起,我应该使用基于IDE模板创建项目。@P.Rodríguez MMicrosoft提供了各种模板,这些模板取决于特定的目标环境,因为它们是启动项目的一种无痛苦的方式。使用MFC,只要您遵循MFC的范例以及MFC的工作方式,并希望应用程序能够结构化,它就是一个相当高效的环境。这里有很多东西,而且它提供了Windows应用程序需要大量的底层管道。你可以在一定程度上扩展它,但是如果你不进行合理的规划,不知道你可以打破或改变什么规则,那么很容易陷入死胡同。
CExample Constructor
CExample Destructor

D:\Visual Studio Projects\Visual C++\MFC_Project\Debug\MFC_Project.exe (process 13012) exited with code 0.