AfxTermExtensionModule
更新 : 2007 年 11 月
各プロセスを拡張 DLL から切り離すとき、MFC が拡張 DLL をクリアできるようにします。これは、プロセスの終了時、または AfxFreeLibrary 呼び出しの結果 DLL をアンロードするときに行われます。
void AFXAPI AfxTermExtensionModule(
AFX_EXTENSION_MODULE& state,
BOOL bAll = FALSE
);
パラメータ
state
拡張 DLL モジュールの状態を保持する AFX_EXTENSION_MODULE 構造体への参照。bAll
TRUE の場合、すべての拡張 DLL モジュールがクリアされます。それ以外の場合、現在の DLL モジュールだけがクリアされます。
解説
AfxTermExtensionModule は、モジュールに割り当てられたあらゆるローカル ストレージを削除します。次に例を示します。
static AFX_EXTENSION_MODULE NVC_MFC_DLLDLL = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("NVC_MFC_DLL.DLL Initializing!\n");
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(NVC_MFC_DLLDLL, hInstance))
return 0;
new CMyDynLinkLibrary(NVC_MFC_DLLDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("NVC_MFC_DLL.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(NVC_MFC_DLLDLL);
}
return 1; // ok
}
アプリケーションが拡張 DLL の読み込みと解放を動的に行う場合、AfxTermExtensionModule を必ず呼び出してください。ほとんどの拡張 DLL は動的に読み込まれないため (通常は、インポート ライブラリ経由でリンクされています)、AfxTermExtensionModule の呼び出しは必要ありません。
MFC 拡張 DLL は、DllMain で AfxInitExtensionModule を呼び出す必要があります。DLL が CRuntimeClass オブジェクトをエクスポートする場合、または独自のカスタム リソースを持っている場合は、DllMain で CDynLinkLibrary オブジェクトを作成する必要があります。
必要条件
ヘッダー : afxdll_.h