5

メイン関数が開始する前に、派生した CWinApp のコンストラクターを呼び出す必要があるのはなぜですか?
なぜそれは次のようなものにすることはできません:

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

この動作を強制する技術的な理由を探しています。
編集:
より明確にするために-MFCなしで​​win32 APIを使用している場合、メインウィンドウはWinMain内に作成されるので、違いは何ですか?

4

1 に答える 1

4

基本的に、これは MFC 設計者がアプリケーション エントリ ポイント (ではなくWinMain() )main()をライブラリ自体に提供することを決定したためであり、ユーザーはそれを作成する必要がありません。

その後、アプリケーションの初期化および終了ロジックは、ユーザー提供の派生シングルトンのインスタンスの メソッドInitInstance()とメソッドに再配置されます。このインスタンスは実行前に存在している必要があります。これは、前述のメソッドを呼び出して (そしてメッセージ ループに入るために)、それを使用して状態を格納するためです (受け取った引数など)。ExitInstance()CWinAppWinMain()Run()nCmdShow

派生インスタンスをグローバル スコープで定義することは、実行CWinApp時に存在することを確認する簡単な方法WinMain()です。

この記事には、MFC アプリケーションの起動時に内部で何が起こるかについての追加の詳細が含まれています。

于 2012-05-05T10:58:14.343 に答える