AFX_EXTENSION_MODULE 構造体
MFC 拡張ダイナミック リンク ライブラリの初期化中に AFX_EXTENSION_MODULE が拡張 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 拡張ダイナミック リンク ライブラリは DllMain の関数の 2 種類の操作を行う必要があります:
AfxInitExtensionModule をダイヤル、戻り値をチェックします。
DLL は CRuntimeClass のオブジェクトをエクスポートするか、独自のカスタム リソースがある場合は CDynLinkLibrary のオブジェクトを作成します。
AFX_EXTENSION_MODULE の構造が DllMain が送信される前に実行された正常な静的オブジェクトの構築の一部として拡張 DLL によって初期化されたランタイム クラスのオブジェクトのコピーを含む拡張 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