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

2021-06-19 16:58:10 字數 1626 閱讀 3881

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

1.開啟vc6.0,新建乙個"win32 dynamic-link library"工程,假設叫defclass,在「dll kind」選擇介面中選擇「a ****** dll project」

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

library defclass

exports

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

class cmath  ;

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

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

5.rebuild 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 中匯出c 類 用def從dll匯出乙個函式,或用 declspec dllexport 指令從dll中匯出一類,想必大家已經很熟悉了,也經常使用著。這裡向大家介紹一種 用def檔案從dll匯出乙個類的方法。具體原理或為什麼就不廢話了,學會匯出後,再慢慢回味吧。這裡主要敘述操作...

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

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

C 從Dll中匯出類

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