資源描述:
《動(dòng)態(tài)鏈接庫(kù)dll編程深入淺出》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、這是《VC++動(dòng)態(tài)鏈接庫(kù)(DLL)編程深入淺出》的第四部分,閱讀本文前,請(qǐng)先閱讀前三部分:(一)、(二)、(三)。MFC擴(kuò)展DLL的內(nèi)涵為MFC的擴(kuò)展,用戶使用MFC擴(kuò)展DLL就像使用MFC本身的DLL一樣。除了可以在MFC擴(kuò)展DLL的內(nèi)部使用MFC以外,MFC擴(kuò)展DLL與應(yīng)用程序的接口部分也可以是MFC。我們一般使用MFC擴(kuò)展DLL來(lái)包含一些MFC的增強(qiáng)功能,譬如擴(kuò)展MFC的CStatic、CButton等類使之具備更強(qiáng)大的能力?! ∈褂肰isualC++向?qū)a(chǎn)MFC擴(kuò)展DLL時(shí),MFC向?qū)?huì)自動(dòng)增加DLL的入口函數(shù)DllMain:extern"C"intAPIE
2、NTRYDllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved){?//RemovethisifyouuselpReserved?UNREFERENCED_PARAMETER(lpReserved);?if(dwReason==DLL_PROCESS_ATTACH)?{??TRACE0("MFCEXPENDDLL.DLLInitializing!");??//ExtensionDLLone-timeinitialization??if(!AfxInitExtensionModule(Mfcexpenddl
3、lDLL,hInstance))???return0;??//InsertthisDLLintotheresourcechain??//NOTE:IfthisExtensionDLLisbeingimplicitlylinkedtoby??//?anMFCRegularDLL(suchasanActiveXControl)??//?insteadofanMFCapplication,thenyouwillwantto??//?removethislinefromDllMainandputitinaseparate??//?functionexportedfromthi
4、sExtensionDLL.?TheRegularDLL??//?thatusesthisExtensionDLLshouldthenexplicitlycallthat??//?functiontoinitializethisExtensionDLL.?Otherwise,??//?theCDynLinkLibraryobjectwillnotbeattachedtothe??//?RegularDLL'sresourcechain,andseriousproblemswill??//?result.??newCDynLinkLibrary(Mfcexpenddll
5、DLL);?}?elseif(dwReason==DLL_PROCESS_DETACH)?{??TRACE0("MFCEXPENDDLL.DLLTerminating!");??//Terminatethelibrarybeforedestructorsarecalled??AfxTermExtensionModule(MfcexpenddllDLL);?}?return1;??//ok} 上述代碼完成MFC擴(kuò)展DLL的初始化和終止處理?! ∮捎贛FC擴(kuò)展DLL導(dǎo)出函數(shù)和變量的方式與其它DLL沒(méi)有什么區(qū)別,我們不再細(xì)致講解。下面直接給出一個(gè)MFC擴(kuò)展DLL的創(chuàng)建
6、及在應(yīng)用程序中調(diào)用它的例子。6.1MFC擴(kuò)展DLL的創(chuàng)建 下面我們將在MFC擴(kuò)展DLL中導(dǎo)出一個(gè)按鈕類CSXButton(擴(kuò)展自MFC的CButton類),類CSXButton是一個(gè)用以取代CButton的類,它使你能在同一個(gè)按鈕上顯示位圖和文字,而MFC的按鈕僅可顯示二者之一。類CSXbutton的源代碼在Internet上廣泛流傳,有很好的“群眾基礎(chǔ)”,因此用這個(gè)類來(lái)講解MFC擴(kuò)展DLL有其特殊的功效?! FC中包含一些宏,這些宏在DLL和調(diào)用DLL的應(yīng)用程序中被以不同的方式展開(kāi),這使得在DLL和應(yīng)用程序中,使用統(tǒng)一的一個(gè)宏就可以表示出輸出和輸入的不同意思:/
7、/fordata#ifndefAFX_DATA_EXPORT?#defineAFX_DATA_EXPORT__declspec(dllexport)#endif#ifndefAFX_DATA_IMPORT?#defineAFX_DATA_IMPORT__declspec(dllimport)#endif//forclasses#ifndefAFX_CLASS_EXPORT?#defineAFX_CLASS_EXPORT__declspec(dllexport)#endif#ifndefAFX_CLASS_IMPORT?#defineAFX_CLASS