±ÏÒµÂÛÎÄ - VC++»·¾³ÏµĶ¯Ì¬Á´½Ó¿âµÄ¿ª·¢ÓëÓ¦Óà ÏÂÔØ±¾ÎÄ

VC++»·¾³Ï¶¯Ì¬Á´½Ó¿âµÄ¿ª·¢¼°Ó¦ÓÃ

#ifdef _AFXEXT AFX_EXT_API AFX_API_EXPORT #else AFX_API_IMPORT #ifdef _AFXEXT AFX_EXT_DATA AFX_DATA_EXPORT #else AFX_DATA_IMPORT

4.2. MFCÀ©Õ¹DLLµ¼³öMFCÅÉÉúÀà

ÔÚÏÂÊöÀý×ÓÖУ¬ÎÒÃǽ«Ð½¨Ò»¸öÃûΪ¡°ExtDll¡±µÄMFCÀ©Õ¹DLL¹¤³Ì£¬ÔÚÕâ¸öDLLÖе¼³öÒ»¸ö¶Ô»°¿òÀ࣬Õâ¸ö¶Ô»°¿òÀàÅÉÉú×ÔMFCÀàCDialog¡£

ͼ 4-2-1 ´´½¨MFCÀ©Õ¹DLL

25

VC++»·¾³Ï¶¯Ì¬Á´½Ó¿âµÄ¿ª·¢¼°Ó¦ÓÃ

ͼ 4-2-2 ´´½¨MFCÀ©Õ¹DLL

ʹÓÃMFCÏòµ¼Éú³ÉMFCÀ©Õ¹DLLʱ£¬ÏµÍ³»á×Ô¶¯Ìí¼ÓÈçÏ´úÂ룺

static AFX_EXTENSION_MODULE ExtDllDLL = { NULL, NULL }; extern \

DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved ) {

// Remove this if you use lpReserved

UNREFERENCED_PARAMETER( lpReserved );

//˵Ã÷£ºlpReservedÊÇÒ»¸ö±»ÏµÍ³Ëù±£ÁôµÄ²ÎÊý£¬¶ÔÓÚÒþʽÁ´½ÓÊÇÒ»¸ö·ÇÁãÖµ£¬¶ÔÓÚÏÔʽÁ´½ÓÖµÊÇÁã if (dwReason == DLL_PROCESS_ATTACH) {

TRACE0( \ // Extension DLL one-time initialization

if ( !AfxInitExtensionModule( ExtDllDLL, hInstance )) return 0;

// Insert this DLL into the resource chain new CDynLinkLibrary( ExtDllDLL );

26

VC++»·¾³Ï¶¯Ì¬Á´½Ó¿âµÄ¿ª·¢¼°Ó¦ÓÃ

} else if (dwReason == DLL_PROCESS_DETACH) { TRACE0( \ // Terminate the library before destructors are called AfxTermExtensionModule( ExtDllDLL ); } return 1; // ok }

´úÂë·ÖÎöÈçÏ£º

£¨1£©ÉÏÊö´úÂëÍê³ÉMFCÀ©Õ¹DLLµÄ³õʼ»¯ºÍÖÕÖ¹´¦Àí£»

£¨2£©³õʼ»¯ÆÚ¼äËù´´½¨µÄ CDynLinkLibrary ¶ÔÏóʹMFCÀ©Õ¹ DLL ¿ÉÒÔ½« DLLÖеÄCRuntimeClass ¶ÔÏó»ò×ÊÔ´µ¼³öµ½Ó¦ÓóÌÐò£»

£¨3£©AfxInitExtensionModuleº¯Êý²¶»ñÄ£¿éµÄCRuntimeClass ½á¹¹ºÍÔÚ´´½¨ CDynLinkLibrary ¶ÔÏóʱʹÓõĶÔÏ󹤳§£¨COleObjectFactory ¶ÔÏ󣩣»

£¨4£©AfxTermExtensionModuleº¯Êýʹ MFC µÃÒÔÔÚÿ¸ö½ø³ÌÓëÀ©Õ¹ DLL ·ÖÀëʱ£¨½ø³ÌÍ˳ö»òʹÓÃAfxFreeLibraryÐ¶ÔØDLLʱ£©Çå³ýÀ©Õ¹ DLL£»

£¨5£©µÚÒ»ÌõÓï¾ästatic AFX_EXTENSION_MODULE ExtDllDLL = { NULL, NULL };¶¨ÒåÁËÒ»¸öAFX_EXTENSION_MODULEÀàµÄ¾²Ì¬È«¾Ö¶ÔÏó£¬AFX_EXTENSION_MODULEµÄ¶¨ÒåÈçÏ£º

struct AFX_EXTENSION_MODULE { BOOL bInitialized; HMODULE hModule; HMODULE hResource; CRuntimeClass* pFirstSharedClass; COleObjectFactory* pFirstSharedFactory; };

ÔÚ×ÊÔ´±à¼­Æ÷ÖÐÌí¼ÓÒ»¸öÈçÏÂͼËùʾµÄ¶Ô»°¿ò£¬²¢Ê¹ÓÃMFCÀàÏòµ¼ÎªÆäÌí¼ÓÒ»¸ö

27

VC++»·¾³Ï¶¯Ì¬Á´½Ó¿âµÄ¿ª·¢¼°Ó¦ÓÃ

¶ÔÓ¦µÄÀàCExtDialog£¬ÏµÍ³×Ô¶¯Ìí¼ÓÁËExtDialog.hºÍExtDialog.cppÁ½¸öÍ·Îļþ¡£

ͼ 4-2-3 Ìí¼Ó¶Ô»°¿ò

ͼ 4-2-3 Ìí¼Ó¶Ô»°¿òÀà

ÐÞ¸ÄExtDialog.hÖÐCExtDialogÀàµÄÉùÃ÷Ϊ£º

28