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