MFC框架中消失的WinMain()

學過一段時間的MFC之後,很多人大概都有一個疑問:在MFC中,WinMain()哪去了?因爲任何一個使用過Win32 SDK編程的人都知道,WinMain()函數是Win32程序開始的入口點,可是在MFC的框架使用中,一般我們只知道從CWinApp類繼承得到一個新類,然後重寫InitInstance()虛函數,程序框架就可以運行了。哪麼,在MFC中,WinMain()倒底去哪了?
  似乎微軟就是不想讓人清楚、明白的瞭解MFC框架將WinMain()封裝的過程。微軟在MFC中是這樣隱藏調用WinMain()的:
1.在TCHAR.H文件中定義了一個宏:
#define _tWinMain WinMain
這樣MFC源代碼在編譯的時候,_tWinMain就會被替換爲WinMain(),這樣操作系統就可以調用了。


2.在APPMODUL.CPP文件中,定義了_tWinMain()
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
  看見了嗎?裏面調用了AfxWinMain(),也就說MFC把對WinMain()的調用轉化爲對AfxWinMain()的調用,這更加說明,即使在MFC中,也沒有什麼其它神奇的方法能夠跳過或換掉對WinMain()的調用。


3.在WINMAIN.CPP文件中,實現了AfxWinMain()。
AfxWinMain()才實際調用CWinApp->InitApplication()、CWinApp->->InitInstance()完成系統初始化。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章