用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外部的客戶端使用。針對需要單獨釋放物件資源的情...