C++ Builder(BCB6) 使用 DLL
C++ Builder(BCB6) 使用 DLL
資料來源: http://jgm0730.blogspot.com/2016/05/c-builder-dll.html
http://www.aspphp.online/bianchen/cyuyan/cjj/gycjj/201701/7439.html
△原理說明:
DLL(Dynamic Link Library),照字面解釋為動態連結程式庫,在C++ Builder可以依使用者的需求,可將DLL用動態連結或靜態連結來使用。
靜態連結(必須再用工具產生對應檔案):
利用連結器把所有開發完成的應用程式模組結合起來,產生執行檔,且可直接執行這個執行檔,這種把應用程式連結成執行檔的過程就叫靜態連結,所產生的執行檔會隨程式功能的增加而越來越大,執行所佔記憶體空間也會加大,若許多不同的應用程式連結同一堆相同的程式,又會多佔了許多記憶體空間。
動態連結:
把一些經常會共用的程式碼,製作成DLL檔,執行時,若呼叫到DLL檔內包含的函數時,系統才會把DLL載入記憶體,若有許多不同的應用程式,都使用到共同的程式庫,系統只會保留一份程式碼在記憶體上。
△BCB開發DLL檔方法:
1.直接選[File]->[New],點選[New]頁次的DLL圖示,在選OK。
2.接著會彈出一個DLL Wizard對話盒,可選擇產生以C或C++為語法的DLL樣版程式,以及選要以BCB的VCL或Microsoft Visual C++為基礎架構。
3.按OK後,就會產生一個程式樣版。
4.再來,就是開始把要用的程式寫進去。
5.好了後,先存檔[File]->[Save],記得自己建一個自己放程式的目錄。
6.再來就是開始編輯成DLL檔啦:
[Project]->[Build All Project]。
7.完成後,在剛存檔的目錄下,就會產生.dll檔,及.lib檔。
△BCB對DLL之使用方法:
★方式一:(靜態連結)
1.開啟BCB並新增一個Application專案
2.選擇「File/Save Project As」將此專案更名為自己的專案名稱,並將檔案儲存到自定的目錄之下。
3.BCB有提供一個小工具,可將DLL檔轉成LIB檔。請在C:\Program\Files\Borland\Cbuilder6\Bin目錄下,可找到一個叫 IMPLIB.EXE的工具程式。
4.在命令提式字元模式(dos模式)下,用此工具程式去轉換,會產生一個副檔名為LIB的檔。
命令格式如下:
IMPLIB 檔名.LIB 檔名.DLL
5.轉好後,將LIB檔及DLL檔放到自定的專案儲存目錄下(若有.h檔,一起放入)
6.引用
a.開啟 View->Project Manager
b.選取要呼叫DLL的專案,按右鍵->Add…
c.將剛轉好的LIB檔加入。
7.在程式前(Head)宣告要呼叫DLL檔內的哪一隻函數。
例如:
extern "C" __declspec(dllimport) bool __stdcall CheckString(char *pData, int iLen);
8.這樣就完成,可直接去呼叫DLL檔的函數。
例如:
bool ok=CheckString(input,len);
★方式二:(動態連結) ~ 不使用IMPLIB工具去轉LIB,直接去呼叫DLL檔。
1.開啟BCB並新增一個Application專案。
2.選擇「File/Save Project As」將此專案更名為自己的專案名稱,並將 檔案儲存到自定的目錄之下。
3.將DLL檔放到自定的專案儲存目錄下。
4.在程式前(Head)宣告要呼叫DLL檔內的哪一隻函數。
例如:
extern "C" __declspec(dllimport) void __fastcall CustomerForm(char *st);
5.宣告 DLL檔內函數的指標
void (*CustomerForm) (char *);
6.將DLL檔載入,並取得handle
HINSTANCE hInst=LoadLibrary("pDelphiDLL.dll");
7.取得此DLL檔函數的位址
(farROC &) CustomerForm=GetProcAddress(hInst,"CustomerForm");
8.呼叫DLL檔的函數
CustomerForm (Edit1->Test.c_str());
9.釋放DLL檔
FreeLibrary(hInst);