怎樣在C++Builder中建立使用DLL (轉)

worldblog發表於2007-12-14
怎樣在C++Builder中建立使用DLL (轉)[@more@]

怎樣在C++Builder中建立使用DLL

 
自從C++Builder從去年浪漫情人節上市以來,吸引了大量的、VC、Vb的員到它的懷抱,大量的C、C++程式設計師感嘆道:總算有了C的視覺化開發工具,對我也是一樣,從BC、Delphi到C++Builder。
  動態連結庫(DLL)是常遇到的程式設計方法,下面我就介紹一下在BCB (C++Builder下簡稱BCB) 中如何建立使用DLL和一些技巧。
  一、建立:
  使用BCB File|NEW建立一個新的DLL工程,並儲存好BCB,生成一個DLL的程式。
  1.DllEntryPoint為一個入口方法,如果使用者在DLL被初始化或者登出時被,用來寫入對DLL的初始化程式和解除安裝程式;引數:hinst用來指示DLL的基地址;reason用來指示DLL的呼叫方式,用於區別多執行緒單執行緒對DLL的呼叫、建立、解除安裝DLL;
  2.在程式中加入自己所要建立的DLL過程、函式;
  3.用dllimport描述出口;
  例程式如下:
  #include
  #pragma hdrstop
  extern “C” __declspec(dllexport) int test();
  int WIN DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
  {
   return 1;
  }
  int test()
  {
   return 3;
  }
  注意:動態連結庫中呼叫過程、函式時有不同的CALL方式 __cdecl、 __pascal, __fastcall、__stdcall,BCB中預設的方式為__cdecl(可不寫),如果考慮相容性可用時__stdcall宣告方法為:
  extern “C” __declspec(dllexport) int __stdcall test();
  對於其中過程、函式也改為:
  int __stdcall test()
  二、使用DLL
  在BCB中使用DLL有兩種方法:
  1.用靜態呼叫法
  首先需要在BCB的專案中加入輸入介面庫(import library),開啟工程專案,使用BCB View|Project Manager開啟專案列表,向專案中加入介面庫(*.lib)。
  其次在標頭檔案中加入介面宣告。
  例程式如下:
   //define in include file
  extern “C” __declspec(dllimport) int __cdecl test();
  //use function in main program
  int I;
  I=test();
  注意:
  (1)動態連結庫呼叫過程、函式時CALL方式 與建立時方式一樣不寫為__cdecl,其它需要宣告。
  (2)BCB建立的DLL有對應的輸入介面庫(import library),如只有DLL而無庫時,可用BCB的implib工具產生:implib xxx.lib xxx.dll;另外可用:tlib xxx.lib,xxx.lst 產生DLL的內部函式列表,許多Windows的未公開技術就是用這種方法發現的。
  2.動態呼叫法
  動態呼叫法要用Windows API 中的LoadLibrary()和GetProcAddress()來調入DLL庫,指出庫中函式位置,這種方法較常見。
  例程式如下:
   HINSTANCE dd;
   int _stdcall (*ddd)(void);
   dd=LoadLibrary(“xxx.dll”);
   ddd=GetProcAddress(dd,“test”);
   Caption=IntToStr(ddd());
  FreeLibrary(dd);
  三、注意:
  建立DLL時編譯連結時注意設定Project Options。
  Packages標籤:去除Builder with runtime packages檢查框。
  Linker標籤:去除Use dynamic RTL檢查框。
  否則建立的DLL需要Runtime packages or Runtime library。

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

相關文章