來源:互聯網網民 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