main函数可以 MFC没有main函数也可以执行吗?急

2017/4/15 0:40:03

关于MFC的main函数2008-01-21 11:23在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函 数,是找不到WinMain函数的。

main函数可以 MFC没有main函数也可以执行吗?急

MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序 的框架中,编译时会自动将该函数链接到可执行文件中。程序员可以重写WinMain函数,但一般不需要这么做。

main函数可以 MFC没有main函数也可以执行吗?急

下面的程序清单3-1给出了WinMain函数的代码。其中,_tWinMain函数在\DevStudio\Vc\Mfc\src\ AppModul.cpp中定义,它所调用的AfxWinMain函数在同一目录下的WinMain.

cpp中定义。名字是_tWinMain函数而不是 WinMain,是考虑到对不同字符集的支持,在tchar.h中有_tWinMain的宏定义。

main函数可以 MFC没有main函数也可以执行吗?急

在ANSI字符集下编译时,_tWinMain就变成 WinMain,在Unicode下编译时,_tWinMain就变成wWinMain。 提示:Unicode是具有固定宽度、统一的文本和字符的编码标准。

由于Unicode采用的是16位编码,因此可以包含世界各地的书写系统的字 符和技术符号(如中文也在Unicode之中),从而克服了ASCII码在表示多语言文本上的不足之处,扩大了ASCII码7位编码方案的好处。

main函数可以 MFC没有main函数也可以执行吗?急

Unicode同等地对待所有的字符,...关于MFC的main函数2008-01-21 11:23在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。

但是,如果浏览Hello程序的所有的方法和全局函 数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序 的框架中,编译时会自动将该函数链接到可执行文件中。

main函数可以 MFC没有main函数也可以执行吗?急

程序员可以重写WinMain函数,但一般不需要这么做。 下面的程序清单3-1给出了WinMain函数的代码。其中,_tWinMain函数在\DevStudio\Vc\Mfc\src\ AppModul.

cpp中定义,它所调用的AfxWinMain函数在同一目录下的WinMain.cpp中定义。

main函数可以 MFC没有main函数也可以执行吗?急

名字是_tWinMain函数而不是 WinMain,是考虑到对不同字符集的支持,在tchar.h中有_tWinMain的宏定义。在ANSI字符集下编译时,_tWinMain就变成 WinMain,在Unicode下编译时,_tWinMain就变成wWinMain。

提示:Unicode是具有固定宽度、统一的文本和字符的编码标准。由于Unicode采用的是16位编码,因此可以包含世界各地的书写系统的字 符和技术符号(如中文也在Unicode之中),从而克服了ASCII码在表示多语言文本上的不足之处,扩大了ASCII码7位编码方案的好处。

main函数可以 MFC没有main函数也可以执行吗?急

Unicode同等地对待所有的字符,并且在表示各种语言的任何字符时既不需要换码序列(escape)也不需要控制代码。

Win32和Visual C 很好的支持Unicode字符集。 清单3-1 _tWinMain函数定义 // export WinMain to force linkage to this module extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow); #ifdef _MAC extern "C" int PASCAL #else extern "C" int WINAPI #endif _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // call shared/exported WinMain return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow); } AfxWinMain函数定义: ///////////////////////////////////////////////////////////////////////////// // Standard WinMain implementation // Can be replaced as long as 'AfxWinInit' is called first int AFXAPI AfxWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { ASSERT(hPrevInstance == NULL); int nReturnCode = -1; CWinApp* pApp = AfxGetApp(); // AFX internal initialization if (!

main函数可以 MFC没有main函数也可以执行吗?急

AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow)) goto InitFailure; // App global initializations (rare) ASSERT_VALID(pApp); if (!

pApp->InitApplication()) goto InitFailure; ASSERT_VALID(pApp); // Perform specific initializations if (!

pApp->InitInstance()) { if (pApp->m_pMainWnd !

= NULL) { TRACE0("Warning: Destroying non-NULL m_pMainWnd\n"); pApp->m_pMainWnd->DestroyWindow(); } nReturnCode = pApp->ExitInstance(); goto InitFailure; } ASSERT_VALID(pApp); nReturnCode = pApp->Run(); ASSERT_VALID(pApp); InitFailure: #ifdef _DEBUG // Check for missing AfxLockTempMap calls if (AfxGetModuleThreadState()->m_nTempMapLock !

= 0) { TRACE1("Warning: Temp map lock count non-zero (%ld).

\n", AfxGetModuleThreadState()->m_nTempMapLock); } AfxLockTempMaps(); AfxUnlockTempMaps(-1); #endif AfxWinTerm(); return nReturnCode; } 应用程序执行时,Windows自动调用应用程序框架内部的WinMain函数。

如清单3-1所示,WinMain函数会查找该应用程序的一个全 局构造对象,这个对象是由CWinApp派生类构造的,有且只有一个。它是一个全局对象,因此在程序启动时,它就已经被构造好了。

main函数可以 MFC没有main函数也可以执行吗?急

随后,WinMain将调用这个对象的InitApplication和InitInstance成员函数,完成应用程序实例的初始化工作。随 后,WinMain调用Run成员函数,运行应用程序的消息循环。在程序结束时,WinMain调用AfxWinTerm函数,做一些清理工作。展开

main函数可以 MFC没有main函数也可以执行吗?急