次の方法で共有


AFX_EXTENSION_MODULE 構造体

更新 : 2007 年 11 月

AFX_EXTENSION_MODULE は、MFC 拡張ダイナミック リンク ライブラリ (DLL: Dynamic-Link Library) の初期化において、拡張 DLL モジュールの状態を保持するために使用されます。

struct AFX_EXTENSION_MODULE
{
   BOOL bInitialized;
   HMODULE hModule;
   HMODULE hResource;
   CRuntimeClass* pFirstSharedClass;
   COleObjectFactory* pFirstSharedFactory;
};

パラメータ

  • bInitialized
    DLL モジュールが AfxInitExtensionModule で初期化済みの場合は TRUE

  • hModule
    DLL モジュールのハンドル。

  • hResource
    DLL カスタム リソース モジュールのハンドル。

  • pFirstSharedClass
    DLL モジュールの先頭ランタイム クラスに関する情報 (CRuntimeClass 構造体) へのポインタ。ランタイム クラス リストの先頭を指定するために使用します。

  • pFirstSharedFactory
    DLL モジュールの先頭オブジェクト ファクトリ (COleObjectFactory オブジェクト) へのポインタ。クラス ファクトリ リストの先頭を指定するために使用します。

解説

MFC 拡張 DLL では、DllMain 関数で次の 2 つの処理を行う必要があります。

  • AfxInitExtensionModule を呼び出し、戻り値を確認します。

  • DLL が CRuntimeClass オブジェクトをエクスポートするか、または独自のカスタム リソースを持っている場合、CDynLinkLibrary オブジェクトを作成します。

AFX_EXTENSION_MODULE 構造体は、拡張 DLL モジュール状態のコピーを保持するために使用されます。これには、DllMain が実行される前に、標準静的オブジェクト構築の一部として、拡張 DLL によって初期化されたランタイム クラス オブジェクトのコピーも含まれます。次に例を示します。

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;

AFX_EXTENSION_MODULE 構造体に保存されたモジュール情報は、CDynLinkLibrary オブジェクトにコピーできます。次に例を示します。

IMPLEMENT_DYNAMIC(CMyDynLinkLibrary, CDynLinkLibrary)

CMyDynLinkLibrary::CMyDynLinkLibrary(AFX_EXTENSION_MODULE& state, BOOL bSystem)
   : CDynLinkLibrary(state, bSystem)
{
#ifndef _AFX_NO_OLE_SUPPORT
    m_factoryList.Construct(offsetof(COleObjectFactory, m_pNextFactory));
#endif
    m_classList.Construct(offsetof(CRuntimeClass, m_pNextClass));

    // copy info from AFX_EXTENSION_MODULE struct
    ASSERT(state.hModule != NULL);
    m_hModule = state.hModule;
    m_hResource = state.hResource;
    m_classList.m_pHead = state.pFirstSharedClass;
#ifndef _AFX_NO_OLE_SUPPORT
    m_factoryList.m_pHead = state.pFirstSharedFactory;
#endif
    m_bSystem = bSystem;
}

必要条件

ヘッダー : afx.h

参照

参照

AfxInitExtensionModule

AfxTermExtensionModule

その他の技術情報

構造体、スタイル、コールバック関数とメッセージ マップ