用DEF文件從Dll中導出C++類

       用DEF從DLL導出一個函數,或用__declspec(dllexport)指令從DLL中導出一類,想必大家已經很熟悉了,也經常使用着。這裏向大家介紹一種用DEF文件從DLL導出一個類的方法。主要操作步驟如下:

 

1.打開VC6.0,新建一個"Win32 Dynamic-Link Library"工程,假設叫DefClass,在“Dll kind”選擇界面中選擇“A simple dll project”

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

LIBRARY DefClass

EXPORTS

3.向工程中加入一個類CMath,並添加一個Add方法,使之看起來如下: class CMath
{
public:
int Add(int a,in b);
CMath();
virtual ~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); <SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </SCRIPT> <script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script> <SCRIPT src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></SCRIPT> <script>window.google_render_ad();</script>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章