다음을 통해 공유


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은 함수에서 DllMain 다음 두 가지 작업을 수행해야 합니다.

  • AfxInitExtensionModule을 호출하고 반환 값을 확인합니다.

  • DLL이 CDynLinkLibrary CRuntimeClass 개체를 내보내거나 자체 사용자 지정 리소스가 있는 경우 개체를 만듭니다.

이 구조체 AFX_EXTENSION_MODULE 는 MFC 확장 DLL이 입력하기 전에 DllMain 실행된 일반 정적 개체 생성의 일부로 초기화된 런타임 클래스 개체의 복사본을 포함하여 MFC 확장 DLL 모듈 상태의 복사본을 보유하는 데 사용됩니다. 예시:

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