編寫DLL所學所思 2 匯出類

2021-09-24 11:56:53 字數 1089 閱讀 5601

2011.10.6

燭秋

一、匯出類的簡單方式

這種方式是比較簡單的,同時也是不建議採用的不合適方式。

只需要在匯出類加上

__declspec(dllexport)

,就可以實現匯出類。物件空間還是在使用者的模組裡,

dll只提供類中的函式**。不足的地方是:使用者需要知道整個類的實現,包括基類、類中成員物件,也就是說所有跟匯出類相關的東西,使用者都要知道。通過

dependency walker

可以看到,這時候的

dll 這種匯出類的方式,除了匯出的東西太多、使用者對類的實現依賴太多之外,還有其它問題:必須保證使用同一種編譯器。匯出類的本質是匯出類裡的函式,因為語法上直接匯出了類,沒有對函式的呼叫方式、重新命名進行設定,導致了產生的

dll並不通用。

部分**(dll標頭檔案):

二、匯出類的較好方式

這種方式是比較合適的,跟

com類似。

結構是這樣的:匯出類是乙個派生類,派生自乙個抽象類

——都是純虛函式。使用者需要知道這個抽象類的結構。

dll最少只需要提供乙個用於獲取類物件指標的介面。使用者跟

dll提供者共用乙個抽象類的標頭檔案,使用者依賴於

dll的東西很少,只需要知道抽象類的介面,以及獲取物件指標的匯出函式,物件記憶體空間的申請是在

dll模組中做的,釋放也在

dll模組中完成

,最後記得要呼叫釋放物件的函式。

這種方式比較好,通用,產生的

dll沒有特定環境限制。借助了

c++類的虛函式。一般都是採用這種方式。除了對

dll匯出類有好處外,採用介面跟實現分離,可以使得工程的結構更清晰,使用者只需要知道介面,而不需要知道實現。

部分**:

(1)dll標頭檔案:

(2)匯出類標頭檔案:

demo

三、總結

使用vs2005

自動生成的**可以省去很多力氣,比起以前做練習什麼都是自己動手寫方便多了。要注意一下工程的設定,熟悉它們的作用可以加快程式設計速度。

demo**附件:

編寫DLL所學所思 2 匯出類

2011.10.6 燭秋 一 匯出類的簡單方式 這種方式是比較簡單的,同時也是不建議採用的不合適方式。只需要在匯出類加上 declspec dllexport 就可以實現匯出類。物件空間還是在使用者的模組裡,dll只提供類中的函式 不足的地方是 使用者需要知道整個類的實現,包括基類 類中成員物件,也...

編寫DLL所學所思 2 匯出類

2011.10.6 燭秋 一 匯出類的簡單方式 這種方式是比較簡單的,同時也是不建議採用的不合適方式。只需要在匯出類加上 declspec dllexport 就可以實現匯出類。物件空間還是在使用者的模組裡,dll只提供類中的函式 不足的地方是 使用者需要知道整個類的實現,包括基類 類中成員物件,也...

DLL中匯出類

dll中定義的類可以在應用工程中使用。下面的例子裡,我們在dll中定義了point和circle兩個類,並在應用工程中引用了它們。檔名 point.h,point類的宣告 ifndef point h define point h ifdef dll file class declspec dlle...