2011-07-29 8 views
5

MFCでは、wWinMainappmodul.cppで定義されています。このファイルは、私が見ることのできるmfc90ud.dllに組み込まれています。しかし、アプリケーションを実行すると、コールスタックはMyApplication.exe!wWinMainと表示されます。 にエクスポートされた関数wWinMainはどのように使用され、アプリケーションに配置されましたか?MFCのwWinMainはどのように実行可能ファイルになりますか?

答えて

10

ソリューションエクスプローラウィンドウのプロパティ、リンカ、コマンドラインでプロジェクトを右クリックします。 [Additional Options]ボックスに/ verboseと入力します。プロジェクトを再構築します。 [出力]ウィンドウにリンカーがシンボルを検出した場所のトレースが表示されるようになりました。これを見つけるために「WinMain関数」のためにそれを検索:

1> Searching c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\lib\mfcs90ud.lib: 
1>  Found [email protected] 
1>  Referenced in msvcrtd.lib(wcrtexew.obj) 
1>  Loaded mfcs90ud.lib(appmodul.obj) 

はmfcs90ud.libは、静的リンクライブラリで、ライブラリ名に注意してください。あなたは「mfcs90ud.lib」を検索した場合、あなたはまた、そのライブラリを参照してしまった方法を見ることができます。

1>Starting pass 1 
1>Processed /DEFAULTLIB:mfc90ud.lib 
1>Processed /DEFAULTLIB:mfcs90ud.lib 
1>Processed /DEFAULTLIB:msvcrtd.lib 
etc.. 

あなたが「マスフローコントローラ」のためのMFCソースコードを検索する場合は、この/ DEFAULTLIBオプションが注入されてしまった方法を見つけることができます。 afx.hから:

  #ifdef _DEBUG 
        #pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib") 
        #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib") 
      #else 
        #pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib") 
        #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib") 
      #endif 

MFCアプリは2つのライブラリをリンクしています。 Mfc90u.libは、MFCのDLLバージョンのインポートライブラリです。 Mfcs90.libは、実行可能ファイルにリンクされるビットを含む静的リンクライブラリです。 WinMain()を含む。

+0

優秀、徹底的な回答ありがとう:) –

+0

質問の理由は、私はMFCの初期起動のいくつかをオーバーライドしたかったということです。私の最初の考えはWinMainに行くことでしたが、今はAfxWinMainを代わりに使うことができます。 –

1

リンカはそれをすべて行います。これは、すべてのオブジェクトファイル、ライブラリファイルを必要とするものと一致します。装飾と一緒に、適切な宣言と定義などを一致させることができます。

1

魔法はCWinAppののコンストラクタで行われます。

  1. あなたは(ほとんどが派生型の)この型のグローバル変数を宣言します。
  2. CWinApp :: CWinAppが呼び出されました(いずれのメインルーチンのより前に)。
  3. それは後でAfxGetApp()によって返されるいくつかのデータ構造を設定します - それはかなり複雑です!
  4. wWinMainが呼び出されます。これは、CWinAppコンストラクタによるデータ構造設定を使用します。 wWinMainから、またはカスタムCWinApp由来のコンストラクタから

てみデバッグ。

+0

こんにちは、あなたの答えをありがとうが、実際には私の質問に答えることはありませんでした。 –

+0

あなたはappmodul.objを含めることを意味しますか? – Ajay

+0

はい、私はMFCが静的ライブラリと動的ライブラリで構成されていることを認識しませんでした。 –

関連する問題