一 匯出類的簡單方式

2021-06-20 10:59:28 字數 3271 閱讀 8911

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

只需要在匯出類加上__declspec(dllexport),就可以實現匯出類。物件空間還是在使用者的模組裡,dll只提供類中的函式**。不足的地方是:使用者需要知道整個類的實現,包括基類、類中成員物件,也就是說所有跟匯出類相關的東西,使用者都要知道。通過dependency walker可以看到,這時候的dll匯出的是跟類相關的函式:如建構函式、賦值操作符、析構函式、其它函式,這些都是使用者可能會用到的函式。

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

//cswuyg

//dll匯出類,比較差勁的方法

#pragma once

#else

#endif

//基類也必須匯出,否則警告:

class

;

//也必須匯出

class

;

classpubliccbase

;

這種方式是比較合適的,跟com類似。

結構是這樣的:匯出類是乙個派生類,派生自乙個抽象類——都是純虛函式。使用者需要知道這個抽象類的結構。dll最少只需要提供乙個用於獲取類物件指標的介面。使用者跟dll提供者共用乙個抽象類的標頭檔案,使用者依賴於dll的東西很少,只需要知道抽象類的介面,以及獲取物件指標的匯出函式,物件記憶體空間的申請是在dll模組中做的,釋放也在dll模組中完成,最後記得要呼叫釋放物件的函式。

這種方式比較好,通用,產生的dll沒有特定環境限制。借助了c++類的虛函式。一般都是採用這種方式。除了對dll匯出類有好處外,採用介面跟實現分離,可以使得工程的結構更清晰,使用者只需要知道介面,而不需要知道實現。

部分**:

(1)dll標頭檔案:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

//cswuyg

//dll匯出類

//dll跟其使用者共用的標頭檔案

#pragma  once

#else

#endif

classiexport

;

extern"c"

extern"c"void_stdcall destroyexportobj(iexport* pexport);

(2)匯出類標頭檔案:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

//cswuyg

//dll匯出類

// 實現類

#pragma once

classexportimpl :publiciexport

;

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

php匯出excel表簡單方式

大部分在匯出excel表的時候都使用外掛程式,這裡介紹乙個更簡單的方法,建立乙個.xls檔案,拼接,最後輸出資料就可以了 需加入這兩行 filename chuexcel 輸出檔名稱 header content disposition attachment filename filename xl...

垂直居中的幾種簡單方式

1 對於單行文字或者內聯元素,可以在父元素使用 line height height 注意,對於img來說,因為有基線的問題在,所以img除了在父元素加行高外,還有給自身新增 vertical middle 2 對於塊級元素,可以使用 特性來實現.html css 利用 屬性設定垂直居中,一定是給父...

canvas 實現火焰的簡單方式

1.火焰的構造 構造火焰 function torch else 中心點 this.rectcenterpoint 矩形中心點 運動速度 this.speed 火焰存活時間 this.life this.width random 1,2 this.remaining life this.maxwid...