首頁 > 易卦

手把手教你用CC++語言建立及除錯動態庫DLL程式

作者:由 編碼那些事 發表于 易卦日期:2022-01-29

c 除錯怎麼用

引子

動態連結庫DLL檔案不僅可以實現程式碼、資源和資料的共享,同時也可以對原始碼起保護作用,對於開發者來講,DLL的生成及除錯是程式設計師必須掌握的一種技術,下面透過一個具體的例子,演示使用C/C++語言生成及呼叫DLL檔案的方法。這兒開發工具選擇的是小巧玲瓏、啟動迅速、精典一代的VC6。0環境,開發完成的目錄結構如下圖所示:

手把手教你用CC++語言建立及除錯動態庫DLL程式

從目錄結構中可以看出,這個例子在“E”盤的“MyDllCode”資料夾下建立了一個工作空間“MyDllCode。dsw”,工作空間中包含了兩個專案,分別對應資料夾“MyDllSrc”和“MyDllTest”,其中, 前者是動態庫的原始碼工程,後者是測試程式碼(除錯程式碼)工程,另外兩個資料夾“Debug”和“Release”存放了生成的dll和exe檔案。

下面依次詳細說明動態庫的建立及除錯過程。

建立工作空間和專案

在VC6。0中,選擇選單“檔案”——>“新建。。。”,在彈出的對話方塊中切換到“工作區”選項頁,依次填寫工作空間名稱和位置資訊,如下圖所示:

手把手教你用CC++語言建立及除錯動態庫DLL程式

工作區建立完成後,在VC6。0的左邊控制面板上的“FileView”中顯示當前的工作區名稱為“MyDllCode”,包含的專案個數為0,在工作區上點右鍵,彈出的右鍵選單中選擇“新增新工程到工作空間。。。”,如下圖所示:

手把手教你用CC++語言建立及除錯動態庫DLL程式

在彈出的新建工程對話方塊中,選擇工程型別為“Win32 Dynamic-Link Library”,工程名稱為“MyDllSrc”,切記選中“新增到當前工作空間”,設定如下圖所示:

手把手教你用CC++語言建立及除錯動態庫DLL程式

在彈出的動態庫配置對話方塊中,選擇動態庫型別為“一個空的DLL工程”即可,如下圖所示,這樣就完成了動態庫原始碼工程的建立。

手把手教你用CC++語言建立及除錯動態庫DLL程式

同樣的步驟,可以在工作空間中建立一個空的測試程式碼工程,與動態庫原始碼工程不同的是,工程型別選擇“Win32 Console Appliction”的控制檯程式,工程名稱為“MyDllTest”。

工作空間的工程專案建立完成後,在VC6。0的左邊控制面板上的“FileView”中顯示情況如下圖所示,此時包含2個工程專案,皆為空工程,未包含任何原始碼檔案:

手把手教你用CC++語言建立及除錯動態庫DLL程式

設定工程輸出目錄

本例子既包含了動態庫原始碼工程,也包含了測試程式碼工程(即除錯工程),為便於除錯,將兩個工程的輸出檔案目錄設為同一個目錄,如都設為與工作空間“MyDllCode。dsw”同一個目錄,這樣免去了將動態庫dll檔案手動拷到exe所在的目錄下的麻煩。如對於“Debug”模式,在VC6。0中選擇選單“工程”——>“設定”或直接按“Alt+F7”快捷鍵,在彈出的工程對話方塊中選中工程“MyDllSrc”,在右側的“連線”選項卡頁修改輸出檔名,由原來預設的“Debug/MyDllSrc。dll”修改為“。。/Debug/MyDll。dll”,即將生成的“MyDll。dll”檔案修改為當前工程所在目錄的上級目錄的“Debug”資料夾中。同樣方式修改工程“MyDllTest”檔案輸出目錄為“。。/Debug/MyDllTest。exe”如下圖所示:

手把手教你用CC++語言建立及除錯動態庫DLL程式

對於“Release”模式,同上面方式完全相同,分別將工程“MyDllSrc”和“MyDllTest”的檔案輸出目錄修改為“。。/Release/MyDll。dll”和“。。/Release/MyDllTest。exe”。

編寫動態庫工程原始碼檔案

新建標頭檔案“MyDll。h”,在VC6。0中選擇選單“檔案”——>“新建。。。”,在彈出的新建檔案對話方塊中設定如下圖所示,切記勾選“新增到工程”為“MyDllSrc”。

手把手教你用CC++語言建立及除錯動態庫DLL程式

在新建的“MyDll。h”檔案中,程式碼如下:

手把手教你用CC++語言建立及除錯動態庫DLL程式

同樣的方式,新建C++原始檔“MyDll。cpp”,程式碼如下:

手把手教你用CC++語言建立及除錯動態庫DLL程式

在動態庫工程中,定義並匯出了一個函式“MyFunc”,該函式產生等間隔的資料向量並返回資料向量的最後一個值和狀態資訊。在標頭檔案中定義宏“EXPORT”為“extern “C” __declspec(dllexport)”,說明該函式呼叫約定為“C”方式,在其它程式語言中呼叫該函式時,呼叫約定必須一致。編譯執行後即可得到在“E:\MyDllCode\Debug”目錄下得到動態庫檔案“MyDll。dll”。

編寫測試工程(除錯工程)原始碼檔案

同編寫動態庫原始碼檔案類似,新建一個測試程式碼C++原始檔“main。cpp”,切記勾選“新增到工程”為“MyDllTest”,程式碼如下:

手把手教你用CC++語言建立及除錯動態庫DLL程式

程式碼中,透過“#include “。。/MyDllSrc/MyDll。h””引入動態庫的標頭檔案,透過#pragma宏引入lib檔案,這兒注意,路徑必須設定正確。編譯執行後即可得到在“E:\MyDllCode\Debug”目錄下得到可執行程式“MyDllTest。exe”檔案,執行結果如下:

手把手教你用CC++語言建立及除錯動態庫DLL程式

可見,除錯程式碼工程中,已經正確呼叫了“MyFunc”函式。

結論

上面給出了在VC6。0中建立及除錯動態庫的完整過程,在其它如VS2008、VS2010等IDE中,配置環節也是類似的。另外,需要說明的是,由於本例子將動態庫工程和除錯工程放在了同一個工作空間中,因此,在單步除錯中,若在呼叫函式的行設定斷點,則不需作額外的設定,會自動進入到動態庫工程的原始碼“MyDll。cpp”中,觀察“MyFunc”函式的執行情況。

歡迎加關注,共同交流。