在C Builder中建立使用DLL 摘錄

2021-04-01 15:20:54 字數 1909 閱讀 6099

動態鏈結庫(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描述出口;

例程式如下:

#include

#pragma hdrstop

extern "c" __declspec(dllexport) int test();

int winapi dllentrypoint(hinstance hinst, unsigned long reason,void *)

int test()

注意:動態鏈結庫中呼叫過程、函式時有不同的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 ***.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中定義事件

在c builder中,事件是一種委託模型,它是對訊息的封裝。如果你用過vc,你就知道在vc中並不存在什麼事件,而只有訊息處理函式,而在c builder中則是由事件處理函式來負責響應訊息。同是,事件本身也是一指標,它是乙個閉包,通常在c builder中有兩種事件 通知型別事件 即tnotifye...

在C Builder中安裝odac元件

那麼下面就講下我的安裝過程吧,我使用cb6做的編譯,英文部落格中有說可以用批處理編譯的,但我沒有成功,也沒有繼續試驗。1 dac60.bpk 2 dacvcl60.bpk 3 dcldac60.bpk 5 odacvcl60.bpk 結果沒高興完,這一步又出錯了,不能再這樣再換版本了,於是想到以前做...

在C Builder中使用XP視覺樣式

在c builder中使用xp視覺樣式 sdragon 2006 12 28 14 53 使用c builder的朋友都知道,c builder是不支援xp視覺樣式的 vision style 以前我為了讓自己寫的程式看起來漂亮一些,拼命的去自繪控制項 我沒有使用過第三方介面控制項,曾經安裝過,但是...