レギュラー DLL の初期化
レギュラー DLL には CWinApp オブジェクトがあるので、初期化処理と終了処理を MFC アプリケーションと同じ場所で行う必要があります。それは、DLL の CWinApp 派生クラスの InitInstance メンバー関数と ExitInstance メンバー関数です。 MFC は、PROCESS_ATTACH および PROCESS_DETACH のために _DllMainCRTStartup によって呼び出される DllMain 関数を提供するので、プログラマ自身が独自の DllMain 関数を書く必要はありません。 MFC が提供する DllMain 関数は、DLL の読み込み時に InitInstance を呼び出し、DLL がアンロードされる前に ExitInstance を呼び出します。
レギュラー DLL は、InitInstance 関数の中で TlsAlloc と TlsGetValue を呼び出すことによって、複数のスレッドを追跡できます。 これらの関数を使うと、DLL はスレッド固有のデータを追跡できます。
MFC と動的にリンクするレギュラー DLL では、MFC OLE、MFC データベース (DAO)、MFC ソケットのサポートのいずれかを使う場合は、それぞれ、MFC デバッグ拡張 DLL の MFCOxxD.dll、MFCDxxD.dll、MFCNxxD.dll (xx はバージョン番号) が、自動的にリンクされます。 レギュラー DLL の CWinApp::InitInstance で使用するこれらの各 DLL に対して、以下の定義済みの初期化関数を呼び出す必要があります。
MFC のサポート タイプ |
呼び出す初期化関数 |
---|---|
MFC OLE (MFCOxxD.dll) |
AfxOleInitModule |
MFC データベース (MFCDxxD.dll) |
AfxDbInitModule |
MFC ソケット (MFCNxxD.dll) |
AfxNetInitModule |