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