MFC DLL 的三种类型
生活随笔
收集整理的這篇文章主要介紹了
MFC DLL 的三种类型
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
a、Non-MFC DLL:指的是不用MFC的類(lèi)庫(kù)結(jié)構(gòu),直接用C語(yǔ)言寫(xiě)的DLL,其輸出的函數(shù)一般用的是標(biāo)準(zhǔn)C接口,并能被非MFC或MFC編寫(xiě)的應(yīng)用程序所調(diào)用。?
b、Regular(常規(guī)) DLL:和下述的Extension Dlls一樣,是用MFC類(lèi)庫(kù)編寫(xiě)的。明顯的特點(diǎn)是在源文件里有一個(gè)繼承CWinApp的類(lèi)。其又可細(xì)分成靜態(tài)連接到MFC和動(dòng)態(tài)連接到MFC上的。?
靜態(tài)連接到MFC的動(dòng)態(tài)連接庫(kù)只被VC的專(zhuān)業(yè)版和企業(yè)版所支持。該類(lèi)DLL應(yīng)用程序里頭的輸出函數(shù)可以被任意Win32程序使用,包括使用MFC的應(yīng)用程序。輸入函數(shù)有如下形式:?
extern "C" EXPORT YourExportedFunction( );?
如果沒(méi)有extern “C”修飾,輸出函數(shù)僅僅能從C++代碼中調(diào)用。?
DLL應(yīng)用程序從CWinApp派生,但沒(méi)有消息循環(huán)。?
動(dòng)態(tài)鏈接到MFC的規(guī)則DLL應(yīng)用程序里頭的輸出函數(shù)可以被任意Win32程序使用,包括使用MFC的應(yīng)用程序。但是,所有從DLL輸出的函數(shù)應(yīng)該以如下語(yǔ)句開(kāi)始:?
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))?
此語(yǔ)句用來(lái)正確地切換MFC模塊狀態(tài)。?
Regular DLL能夠被所有支持DLL技術(shù)的語(yǔ)言所編寫(xiě)的應(yīng)用程序所調(diào)用。在這種動(dòng)態(tài)連接庫(kù)中,它必須有一個(gè)從CWinApp繼承下來(lái)的類(lèi),DllMain函數(shù)被MFC所提供,不用自己顯式的寫(xiě)出來(lái)。?
c、Extension DLL:用來(lái)實(shí)現(xiàn)從MFC所繼承下來(lái)的類(lèi)的重新利用,也就是說(shuō),用這種類(lèi)型的動(dòng)態(tài)連接庫(kù),可以用來(lái)輸出一個(gè)從MFC所繼承下來(lái)的類(lèi)。它輸出的函數(shù)僅可以被使用MFC且動(dòng)態(tài)鏈接到MFC的應(yīng)用程序使用??梢詮腗FC繼承你所想要的、更適于你自己用的類(lèi),并把它提供給你的應(yīng)用程序。你也可隨意的給你的應(yīng)用程序提供MFC或MFC繼承類(lèi)的對(duì)象指針。Extension DLL使用MFC的動(dòng)態(tài)連接版本所創(chuàng)建的,并且它只被用MFC類(lèi)庫(kù)所編寫(xiě)的應(yīng)用程序所調(diào)用。Extension DLLs 和Regular DLLs不一樣,它沒(méi)有一個(gè)從CWinApp繼承而來(lái)的類(lèi)的對(duì)象,所以,你必須為自己DllMain函數(shù)添加初始化代碼和結(jié)束代碼。?
和規(guī)則DLL相比,有以下不同:?
1、它沒(méi)有一個(gè)從CWinApp派生的對(duì)象;?
2、它必須有一個(gè)DllMain函數(shù);?
3、DllMain調(diào)用AfxInitExtensionModule函數(shù),必須檢查該函數(shù)的返回值,如果返回0,DllMmain也返回0;?
4、如果它希望輸出CRuntimeClass類(lèi)型的對(duì)象或者資源(Resources),則需要提供一個(gè)初始化函數(shù)來(lái)創(chuàng)建一個(gè)CDynLinkLibrary對(duì)象。并且,有必要把初始化函數(shù)輸出;?
5、使用擴(kuò)展DLL的MFC應(yīng)用程序必須有一個(gè)從CWinApp派生的類(lèi),而且,一般在InitInstance里調(diào)用擴(kuò)展DLL的初始化函數(shù)。
b、Regular(常規(guī)) DLL:和下述的Extension Dlls一樣,是用MFC類(lèi)庫(kù)編寫(xiě)的。明顯的特點(diǎn)是在源文件里有一個(gè)繼承CWinApp的類(lèi)。其又可細(xì)分成靜態(tài)連接到MFC和動(dòng)態(tài)連接到MFC上的。?
靜態(tài)連接到MFC的動(dòng)態(tài)連接庫(kù)只被VC的專(zhuān)業(yè)版和企業(yè)版所支持。該類(lèi)DLL應(yīng)用程序里頭的輸出函數(shù)可以被任意Win32程序使用,包括使用MFC的應(yīng)用程序。輸入函數(shù)有如下形式:?
extern "C" EXPORT YourExportedFunction( );?
如果沒(méi)有extern “C”修飾,輸出函數(shù)僅僅能從C++代碼中調(diào)用。?
DLL應(yīng)用程序從CWinApp派生,但沒(méi)有消息循環(huán)。?
動(dòng)態(tài)鏈接到MFC的規(guī)則DLL應(yīng)用程序里頭的輸出函數(shù)可以被任意Win32程序使用,包括使用MFC的應(yīng)用程序。但是,所有從DLL輸出的函數(shù)應(yīng)該以如下語(yǔ)句開(kāi)始:?
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))?
此語(yǔ)句用來(lái)正確地切換MFC模塊狀態(tài)。?
Regular DLL能夠被所有支持DLL技術(shù)的語(yǔ)言所編寫(xiě)的應(yīng)用程序所調(diào)用。在這種動(dòng)態(tài)連接庫(kù)中,它必須有一個(gè)從CWinApp繼承下來(lái)的類(lèi),DllMain函數(shù)被MFC所提供,不用自己顯式的寫(xiě)出來(lái)。?
c、Extension DLL:用來(lái)實(shí)現(xiàn)從MFC所繼承下來(lái)的類(lèi)的重新利用,也就是說(shuō),用這種類(lèi)型的動(dòng)態(tài)連接庫(kù),可以用來(lái)輸出一個(gè)從MFC所繼承下來(lái)的類(lèi)。它輸出的函數(shù)僅可以被使用MFC且動(dòng)態(tài)鏈接到MFC的應(yīng)用程序使用??梢詮腗FC繼承你所想要的、更適于你自己用的類(lèi),并把它提供給你的應(yīng)用程序。你也可隨意的給你的應(yīng)用程序提供MFC或MFC繼承類(lèi)的對(duì)象指針。Extension DLL使用MFC的動(dòng)態(tài)連接版本所創(chuàng)建的,并且它只被用MFC類(lèi)庫(kù)所編寫(xiě)的應(yīng)用程序所調(diào)用。Extension DLLs 和Regular DLLs不一樣,它沒(méi)有一個(gè)從CWinApp繼承而來(lái)的類(lèi)的對(duì)象,所以,你必須為自己DllMain函數(shù)添加初始化代碼和結(jié)束代碼。?
和規(guī)則DLL相比,有以下不同:?
1、它沒(méi)有一個(gè)從CWinApp派生的對(duì)象;?
2、它必須有一個(gè)DllMain函數(shù);?
3、DllMain調(diào)用AfxInitExtensionModule函數(shù),必須檢查該函數(shù)的返回值,如果返回0,DllMmain也返回0;?
4、如果它希望輸出CRuntimeClass類(lèi)型的對(duì)象或者資源(Resources),則需要提供一個(gè)初始化函數(shù)來(lái)創(chuàng)建一個(gè)CDynLinkLibrary對(duì)象。并且,有必要把初始化函數(shù)輸出;?
5、使用擴(kuò)展DLL的MFC應(yīng)用程序必須有一個(gè)從CWinApp派生的類(lèi),而且,一般在InitInstance里調(diào)用擴(kuò)展DLL的初始化函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的MFC DLL 的三种类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VC++动态链接库编程之MFC DLL
- 下一篇: MFC动态链接库的制作步骤和使用方法