用DEF檔案從DLL中匯出C 類

2021-08-25 07:24:24 字數 2983 閱讀 2360

def

檔案從dll

中匯出c++

用def從dll匯出乙個函式,或用__declspec(dllexport)指令從dll中匯出一類,想必大家已經很熟悉了,也經常使用著。這裡向大家介紹一種

用def檔案從dll匯出乙個類的方法。具體原理或為什麼就不廢話了,學會匯出後,再慢慢回味吧。這裡主要敘述操作步驟。

1。開啟vc6.0,新建乙個"win32 dynamic-link library"工程,假設叫defclass

,在「dll kind」選擇介面中選擇「

a ****** dll project」

2新建乙個檔案,命名為defclass.def,先暫時輸入下面的內容,並加入工程。

library defclass

exports

3向工程中加入乙個類cmath,並新增乙個add方法,使之看起來如下:

class cmath

;

它的實現,你想如何由你決定,我做例子時,add返回return a+b;

4開啟工程的設定(settings)介面,選擇link,勾選generate mapfile

5rebuild all工程。

6在vc中開啟debug或release的*.map檔案(如果你工程名這defclass,那就是delclass.map)。

7找到math.obj,比如:

0001:00000080 ??0cmath@@qae@xz

10001080 f math.obj

0001:000000c0 ??_ecmath@@uaepaxi@z

100010c0 f i math.obj

0001:000000c0 ??_gcmath@@uaepaxi@z

100010c0 f i math.obj

0001:00000130 ??1cmath@@uae@xz

10001130 f math.obj

0001:00000170 ?add@cmath@@qaehhh@z

10001170 f math.obj

8把1,4,5行的第2列拷貝到defclass.def檔案中,使之成為下面的樣子(序號自己指定)

library defclass

exports

??0cmath@@qae@xz

@1

??1cmath@@uae@xz

@2

?add@cmath@@qaehhh@z

@3

9儲存所有檔案,再執行rebuild all.

如果一切正常,那你的dll中的類已經以序號匯出的了。這時再往cmath中加函式,如上從map檔案中找到函式的識別符號,並在def檔案中加一項

,分配乙個序號給它。只要保持以前的匯出序號不變,用新編譯生成的dll替換先前的dll,以前的客戶程式仍然可以正常執行。

如何使用生成的dll?

你可以把"math.h""defclass.lib"拷貝到客戶程式的工程目錄下,把"defclass.dll"拷貝到客戶程式的輸出(debug/release)目錄下。 在客戶程式中#include "math.h",在客戶程式的settings中加入對defclass.lib引用。

cmath math;

int nret=math.add(2,3);

可以了嗎?

用DEF檔案從DLL中匯出C程式設計 類

用def從dll匯出乙個引數,或用 declspec dllexport 指令從dll中匯出一類,想必大家已經很熟悉了,也經常使用著。這 裡向大家介紹一種用def文件從dll匯出乙個類的method。具體原理或為什麼就不廢話了,學會匯出後,再慢慢回味吧。這裡主要敘述操作步驟。1.開啟vc6.0,新建...

用DEF檔案從DLL中匯出C程式設計 類

用def從dll匯出乙個引數,或用 declspec dllexport 指令從dll中匯出一類,想必大家已經很熟悉了,也經常使用著。這裡向大家介紹一種用def文件從dll匯出乙個類的method。具體原理或為什麼就不廢話了,學會匯出後,再慢慢回味吧。這裡主要敘述操作步驟。1.開啟vc6.0,新建乙...

C 從Dll中匯出類

從dll中匯出c 類的內容可以參照下面的文章,該文章基本內容寫得比較詳細,分析了使用dll匯出c 類的利弊,同時提出了較好使用dll中物件的模式,即建立對於dll端和客戶端都可見的純虛類,在dll中建立繼承於該純虛類的類,實現純虛類中的純虛函式,供dll外部的客戶端使用。針對需要單獨釋放物件資源的情...