公告

國明的網路筆記

2016年5月26日 星期四

C++ Builder 使用 DLL

DLL(Dynamic Link Library),照字面解釋為動態連結程式庫,在C++ Builder可以依使用者的需求,可將DLL用動態連結或靜態連結來使用。

靜態連結:
利用連結器把所有開發完成的應用程式模組結合起來,產生執行檔,且可直接執行這個執行檔,這種把應用程式連結成執行檔的過程就叫靜態連結,所產生的執行檔會隨程式功能的增加而越來越大,執行所佔記憶體空間也會加大,若許多不同的應用程式連結同一堆相同的程式,又會多佔了許多記憶體空間。

動態連結:
把一些經常會共用的程式碼,製作成DLL檔,執行時,若呼叫到DLL檔內包含的函數時,系統才會把DLL載入記憶體,若有許多不同的應用程式,都使用到共同的程式庫,系統只會保留一份程式碼在記憶體上。

CB開發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);

1 則留言:

  1. 不好意思,我有問題想請教你,就是我已經把BCB一個程式寫好,已經執行成.exe和.cpp檔了 要怎麼把它製作成dll檔呢?

    回覆刪除