C Builder建立及呼叫DLL

2021-08-19 15:41:52 字數 1932 閱讀 4636

動態鏈結庫(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 渲染多個標籤,...