2012-05-05 47 views
5

爲什麼我的派生CWinApp的構造函數應該在main函數啓動之前被調用?
爲什麼不能是這樣的:在MFC中,爲什麼我需要創建CWinApp的全局實例?

int WinMain() 
{ 
    CMainFrame* pMainFrame = new CMainFrame; 
    // etc ... 
} 

我正在尋找迫使這種行爲的技術原因。
編輯:
爲了更清晰 - 如果我使用沒有MFC的win32 API,主窗口是在WinMain中創建的,所以有什麼區別?

+0

推測這樣'CWinApp'的構造函數在* main函數運行之前運行。但我並不確定;我從來沒有試過這樣做,看看它是否工作。你有嗎? –

+0

@CodyGray是的,我嘗試過。應用程序崩潰AfxWinMain –

+0

啊,是的,正如弗雷德裏克的答案預測。 'CWinApp'的構造函數設置了一些狀態變量的值,這是'AfxWinMain'預期的。 –

回答

3

基本上,這是因爲MFC設計者決定提供庫本身的應用程序入口點(WinMain(),不main()),這樣用戶就不必寫一個。

然後,將應用程序的初始化和終止邏輯重定位到用戶提供的來自單實例的CWinApp實例的InitInstance()ExitInstance()方法。這個實例必須在WinMain()運行之前存在,因爲它調用上述方法(並且Run()進入消息循環)並使用它來存儲狀態(如它接收到的nCmdShow參數)。

在全局範圍內定義CWinApp衍生實例是一種簡單的方法,可確保在運行時WinMain()時確實存在該實例。

This article有關於MFC應用程序啓動時發生的情況的更多詳細信息。

相關問題