C++ Builder(BCB6) 使用 DLL

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);

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *