次の方法で共有


AFX_EXTENSION_MODULE 構造体

MFC AFX_EXTENSION_MODULE 拡張 DLL モジュールの状態を保持するために、MFC 拡張 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 は、その関数で次の 2 つの操作を DllMain 行う必要があります。

  • AfxInitExtensionModule を呼び出し、戻り値をチェックします。

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

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

static AFX_EXTENSION_MODULE NVC_MFC_DLLDLL;
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");
        
        // MFC 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