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 は、DllMainAfxInitExtensionModule を呼び出す必要があります。DLL が CRuntimeClass オブジェクトをエクスポートする場合、または独自のカスタム リソースを持っている場合は、DllMainCDynLinkLibrary オブジェクトを作成する必要があります。

必要条件

ヘッダー : afxdll_.h

参照

概念

MFC マクロとグローバル

参照

AfxInitExtensionModule