用DEF檔案從DLL中匯出C++類 (轉)

gugu99發表於2007-08-16
用DEF檔案從DLL中匯出C++類 (轉)[@more@]

用DEF從DLL中匯出C++類

用DEF從DLL匯出一個,或用__declspec(dllexport)指令從DLL中匯出一類,想必大家已經很熟悉了,也經常使用著。這裡向大家介紹一種

用DEF檔案從DLL匯出一個類的方法。具體原理或為什麼就不廢話了,學會匯出後,再慢慢回味吧。這裡主要敘述操作步驟。

1。開啟VC6.0,新建一個" 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中開啟De或Release的*.map檔案(如果你工程名這DefClass,那就是DelClass.map)。

7。找到Math.obj,比如:

 0001:00000080  to:??0CMath@@QAE@XZ">??0CMath@@QAE@XZ  10001080 f  Math.obj
 0001:000000c0    100010c0 f i Math.obj
 0001:000000c0    100010c0 f i Math.obj
 0001:00000130    10001130 f  Math.obj
 0001:00000170    10001170 f  Math.obj
8。把1,4,5行的第2列複製到DefClass.Def檔案中,使之成為下面的樣子(序號自己指定)
 LIBRARY DefClass

 EXPORTS 
 
    @1
 
        @2
 
     @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);

可以了嗎?不行來電喲

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960888/,如需轉載,請註明出處,否則將追究法律責任。

相關文章