天天看點

c++中dll的種類用法分析

a、Non-MFC DLL:指的是不用MFC的類庫結構,直接用C語言寫的DLL,其輸出的函數一般用的是标準C接口,并能被非MFC或MFC編寫的應用程式所調用。

b、Regular DLL:和下述的Extension Dlls一樣,是用MFC類庫編寫的。明顯的特點是在源檔案裡有一個繼承CWinApp的類。其又可細分成靜态連接配接到MFC和動态連接配接到MFC上的。

靜态連接配接到MFC的動态連接配接庫隻被VC的專業般和企業版所支援。該類DLL應用程式裡頭的輸出函數可以被任意Win32程式使用,包括使用MFC的應用程式。輸入函數有如下形式:

extern "C" EXPORT YourExportedFunction( );

如果沒有extern “C”修飾,輸出函數僅僅能從C++代碼中調用。

DLL應用程式從CWinApp派生,但沒有消息循環。

動态連結到MFC的規則DLL應用程式裡頭的輸出函數可以被任意Win32程式使用,包括使用MFC的應用程式。但是,所有從DLL輸出的函數應該以如下語句開始:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

此語句用來正确地切換MFC子產品狀态。

Regular DLL能夠被所有支援DLL技術的語言所編寫的應用程式所調用。在這種動态連接配接庫中,它必須有一個從CWinApp繼承下來的類,DllMain函數被MFC所提供,不用自己顯式的寫出來。

c、Extension DLL:用來實作從MFC所繼承下來的類的重新利用,也就是說,用這種類型的動态連接配接庫,可以用來輸出一個從MFC所繼承下來的類。它輸出的函數僅可以被使用MFC且動态連結到MFC的應用程式使用。可以從MFC繼承你所想要的、更适于你自己用的類,并把它提供給你的應用程式。你也可随意的給你的應用程式提供MFC或MFC繼承類的對象指針。Extension DLL使用MFC的動态連接配接版本所建立的,并且它隻被用MFC類庫所編寫的應用程式所調用。Extension DLLs 和Regular DLLs不一樣,它沒有一個從CWinApp繼承而來的類的對象,是以,你必須為自己DllMain函數添加初始化代碼和結束代碼。

和規則DLL相比,有以下不同:

1、它沒有一個從CWinApp派生的對象;

2、它必須有一個DllMain函數;

3、DllMain調用AfxInitExtensionModule函數,必須檢查該函數的傳回值,如果傳回0,DllMmain也傳回0;

4、如果它希望輸出CRuntimeClass類型的對象或者資源(Resources),則需要提供一個初始化函數來建立一個CDynLinkLibrary對象。并且,有必要把初始化函數輸出;

5、使用擴充DLL的MFC應用程式必須有一個從CWinApp派生的類,而且,一般在InitInstance裡調用擴充DLL的初始化函數。

繼續閱讀