3

MFC DLL では、「CWinApp theApp;」を使用して theApp を宣言する必要があるのはなぜですか。そうしないと、実行時例外が発生します。アプリがインスタンス化されたのはいつですか?

4

1 に答える 1

5

MSDNより】

theApp はアプリケーション オブジェクトです。このオブジェクトは、他の C++ グローバル オブジェクトが構築されるときに構築され、Windows が WinMain 関数を呼び出すときに既に使用可能になっているはずです。また、オブジェクトをグローバル レベルで宣言する必要があります。

[ VisualC++ プログラミングより]

アプリケーションの起動 — ユーザーがアプリケーションを起動すると、Windows はアプリケーション フレームワークの組み込みの WinMain 関数を呼び出し、WinMain は CWinApp から派生したクラスのグローバルに構築されたアプリケーション オブジェクトを探します。C++ プログラムでは、メイン プログラムが実行される前にグローバル オブジェクトが構築されることを忘れないでください。

CMyApp::InitInstanceメンバー関数 — WinMain 関数は、アプリケーション オブジェクトを見つけると、仮想 InitInstance メンバー関数を呼び出します。これにより、アプリケーションのメイン フレーム ウィンドウを構築して表示するために必要な呼び出しが行われます。CWinApp 基本クラスは必要なメイン フレーム ウィンドウの種類を認識しないため、派生アプリケーション クラスで InitInstance をオーバーライドする必要があります。

CWinApp::Runメンバー関数 — Run 関数は基本クラスに隠されていますが、アプリケーションのメッセージをそのウィンドウにディスパッチして、アプリケーションの実行を維持します。WinMain は、InitInstance を呼び出した後に Run を呼び出します。

于 2012-06-19T07:31:46.193 に答える