Struttura AFX_EXTENSION_MODULE
AFX_EXTENSION_MODULE viene utilizzato durante l'inizializzazione delle DLL di estensione MFC per utilizzare lo stato del modulo DLL di estensione.
struct AFX_EXTENSION_MODULE
{
BOOL bInitialized;
HMODULE hModule;
HMODULE hResource;
CRuntimeClass* pFirstSharedClass;
COleObjectFactory* pFirstSharedFactory;
};
Parametri
bInitialized
TRUE se il modulo DLL è stato inizializzato con AfxInitExtensionModule.hModule
Specifica gli handle del modulo DLL.hResource
Specifica gli handle del modulo di risorse personalizzate di DLL.pFirstSharedClass
Un puntatore a informazioni (la struttura di CRuntimeClass ) sulla prima classe di runtime del modulo DLL. Utilizzato per fornire l'inizio dell'elenco classe di runtime.pFirstSharedFactory
Un puntatore al modulo DLL innanzitutto oggetti la factory (un oggetto di COleObjectFactory ). Utilizzato per fornire l'inizio dell'elenco di class factory.
Note
Le DLL di estensione MFC necessario eseguire due operazioni nella funzione di DllMain :
Chiamare AfxInitExtensionModule e controllare il valore restituito.
Creare un oggetto di CDynLinkLibrary se la DLL esporterà gli oggetti di CRuntimeClass o dispone di propri metodi personalizzati.
La struttura di AFX_EXTENSION_MODULE viene utilizzata per utilizzare una copia dello stato del modulo DLL di estensione, inclusa una copia degli oggetti della classe di runtime che sono stati inizializzati dalla DLL di estensione come parte della costruzione di un oggetto static normale eseguita prima di DllMain essere inserito. Di seguito è riportato un esempio.
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;
Le informazioni del modulo archiviate nella struttura di AFX_EXTENSION_MODULE possono essere copiate nell'oggetto di CDynLinkLibrary. Di seguito è riportato un esempio.
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;
}
Requisiti
Intestazione: afx.h