| 導購 | 订阅 | 在线投稿
分享
 
 
 

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

來源:互聯網網民  2008-06-01 01:21:11  評論

要害字 DLL Defclass導出類

用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);

可以了嗎?不行來電喲clineyuan@sina.com

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
要害字 DLL Def class 導出 類 用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); 可以了嗎?不行來電喲clineyuan@sina.com
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有