用def從dll匯出
乙個函式,或用__declspec(dllexport)指令從dll中匯出乙個類,想必大家已經很熟悉了,也經常使用著。這裡向大家介紹一種用def檔案從dll匯出乙個類的方法。具體原理或為什麼就不廢話了,學會匯出後,再慢慢回味吧。這裡主要敘述操作步驟。
1。開啟vc6.0,新建乙個"win32dynamic-linklibrary"工程,假設叫defclass,在「dllkind」選擇介面中選擇「a******dllproject」
2。新建乙個檔案,命名為defclass.def,先暫時輸入下面的內容,並加入工程。
librarydefclass
exports
3。向工程中加入乙個類cmath,並新增乙個add方法,使之看起來如下:
classcmath
;它的實現,你想如何由你決定,我做例子時,add返回returna+b;
4。開啟工程的設定(settings)介面,選擇link,勾選generatemapfile。
5。rebuildall工程。
6。在vc中開啟debug或release的*.map檔案(如果你工程名這defclass,那就是delclass.map)。
7。找到math.obj,比如:
0001:00000080??0cmath@@[email protected]
0001:000000c0??_ecmath@@[email protected]
0001:000000c0??_gcmath@@[email protected]
0001:00000130??1cmath@@[email protected]
0001:00000170?add@cmath@@[email protected]
8。把1,4,5行的第2列拷貝到defclass.def檔案中,使之成為下面的樣子(序號自己指定)
librarydefclass
exports
??0cmath@@qae@xz@1
??1cmath@@uae@xz @2
?add@cmath@@qaehhh@z @3
9。儲存所有檔案,再執行rebuildall.
如果一切正常,那你的dll中的類已經以序號匯出的了。這時再往cmath中加函式,如上從map檔案中找到函式的識別符號,並在def檔案中加一項,分配乙個序號給它。只要保持以前的匯出序號不變,用新編譯生成的dll替換先前的dll,以前的客戶程式仍然可以正常執行。
如何使用生成的dll?
你可以把"math.h"和"defclass.lib"拷貝到客戶程式的工程目錄下,把"defclass.dll"拷貝到客戶程式的輸出(debug/release)目錄下。 在客戶程式中#include"math.h",在客戶程式的settings中加入對defclass.lib引用。
cmathmath;
intnret=math.add(2,3);
從dll中匯出類
三 在客戶程式中使用dll 編譯乙個dll時將建立兩個檔案.dll檔案和.lib檔案。首先將這兩個檔案複製到客戶程式專案的資料夾裡,這裡需要注意dll和客戶程式的版本問題,盡量使用相同的版本,都使用release或者都是debug版本。接著就需要在客戶程式中設定lib檔案,開啟project set...
從DLL中匯出類
從dll中的匯出類,dll 如下 declspec dllexport stdcall class myclass 類 void stdcall myclass setvalue int a,int b 成員函式 int stdcall myclass add 成員函式 呼叫這個dll中,先要進行類...
C 從Dll中匯出類
從dll中匯出c 類的內容可以參照下面的文章,該文章基本內容寫得比較詳細,分析了使用dll匯出c 類的利弊,同時提出了較好使用dll中物件的模式,即建立對於dll端和客戶端都可見的純虛類,在dll中建立繼承於該純虛類的類,實現純虛類中的純虛函式,供dll外部的客戶端使用。針對需要單獨釋放物件資源的情...