DLL の初期化
通常、DLL には、DLL の読み込み時に実行する必要がある初期化コードが含まれています。 Visual C++ を使う場合は、DLL を初期化するコードを追加する場所は、ビルドする DLL の種類によって異なります。 初期化コードや終了コードを追加する必要のない場合は、DLL のビルド時にしなければならないことは特にありません。 次の表では、DLL を初期化する必要がある場合の、初期化コードを追加する場所を示しています。
[DLL の種類] |
初期化/終了コードを追加する場所 |
---|---|
標準 DLL |
DLL 内の CWinApp オブジェクトの InitInstance および ExitInstance |
拡張 DLL |
MFC DLL ウィザード によって生成される DllMain 関数の中 |
非 MFC DLL |
プログラマが提供する DllMain 関数の中 |
Win32 では、すべての DLL にオプションのエントリ ポイント関数 (通常、DllMain) が含まれます。エントリ ポイント関数は、初期化と終了の両方で呼び出されます。 これによって、追加のリソースを必要に応じて、割り当て/解放する機会が与えられます。 Windows には、エントリ ポイント関数が呼び出される 4 つの状況 (プロセスのアタッチ、プロセス デタッチ、スレッド アタッチ、スレッド デタッチ) があります。
C のランタイム ライブラリでは、_DllMainCRTStartup というエントリ ポイント関数が提供されています。この関数は DllMain を呼び出します。 ソース コードから DllMain を呼び出すか、MFC ライブラリ内に提供されている DllMain を使うかは、DLL の種類によって異なります。