動態鏈結庫(dll)是windows程式設計常遇到的程式設計方法,下面我就介紹一下在
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描述出口;
例程式如下:
。nclude
。ragma hdrstop
extern 「c」 __declspec(dllexport) int test();
int winapi dllentrypoint(hinstance hinst, unsigned long reason,
void*)
int test()
__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 ***.lib ***.dll;另外可用:tlib
***.lib,***.lst 產生dll的內部函式列表,許多windows的未公開技術就是用這
種方法發現的。
2.動態呼叫法
動態呼叫法要用windows api 中的loadlibrary()和getprocaddress()來調
入dll庫,指出庫中函式位置,這種方法較常見。
例程式如下:
hinstance dd;
int _stdcall (*ddd)(void);
dd=loadlibrary(「***.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。
C Builder及VC的DLL相互呼叫解決方案
由於ms和borland codegear 兩家的編輯器實現細節不同,造成了它們生成的dll不能相互通用,因此給實際帶來了很多的麻煩。下面來說一說如何解決這個問題。1 用extern c 修飾vc匯出的dll函式。如 extern c declspec dllexport int afunc int...
VC中如何呼叫dl庫
呼叫dll有兩種方法 靜態呼叫和動態呼叫.一 靜態呼叫其步驟如下 錄下 4.開啟你的目標工程選中工程,選擇visual c 的project主選單的settings選單 5.執行第4步後,vc將會彈出乙個對話方塊,在對話方塊的多頁顯示控制項中選擇link頁。然 2.動態呼叫其程式如下 動態呼叫時只需...
react 元件建立及呼叫
元件 可被反覆使用的帶有特定功能的檢視!建立 var mycomponent react.createclass 呼叫 reactdom.render document.getelementbyid example 注意事項 元件類的命名 遵循全駝峰 test mycomponent 渲染多個標籤,...