2009年4月21日 星期二

VC2008 Express 編譯DLL

建立DLL專案:
檔案->新增->專案

選擇Win32,Win32專案

按"下一步"

選擇DLL,然後按完成

修改testdll.cpp,以及加入testdll.h在標頭檔分類裡,而其內容,如之前的文章
PS: testdll.h的加入,可以按右鍵在標頭檔,然後選擇加入->新增項目,選"標頭檔(.h)",名稱輸入testdll.h
可以在方案總管,看到VC幫我們加進來的檔案

修改屬性,在testdll的c++ project上按右鍵(就是標頭檔的上一個階層,或方案的下一個階層),選擇屬性
組態屬性->C/C++->前置處理器,在前置處理器定義裡加進DLL_EXPORT(用分號相隔),確定

選擇建置->建置方案,就可以建置DLL了,可以在方案下的Debug目錄看到testdll.dll和testdll.lib,以及在testdll的目錄裡看到testdll.h,這三個檔案是我們需要的


建置win32 主控台應用程式:檔案->新增->專案

選擇Win32,Win32主控台應用專案

按"完成"

可以在方案總管,看到vc幫我們加進來的檔案
修改testmain.cpp,如之前的文章 ,關於_tmain(...),覺得很詭異的話,之前有些文章有介紹


有三個檔案要加進來,首先
testdll.lib和testdll.h放到tsetmain目錄裡,(testdll.h可以加入標頭檔,方便修改,不過沒差)
lib的加入,進入屬性頁面,組態屬性->連結器->輸入,其他相依性,輸入testdll.lib,確定

選擇建置->建置方案,就可以建置了,不過執行會找不到dll...
將testdll.dll放到執行檔產生的目錄(例如Debug\),就ok了

問題:如果硬碟是FAT32的格式,會有一些問題,有其他高手有紀錄下來,及解決方式
這裡做個備忘
Step1 於系統功能表中點擊「專案」→「屬性」(或按Alt + F7)
Step2 展開「組態屬性」
Step3 展開「連結器」
Step4 點擊「偵錯」
Step5 把右方視窗裡的「產生對應檔」改為「是(/MAP)」
Step6 點擊「資訊清單工具」
Step7 把右方視窗裡的「使用 FAT32 解決辦法」改為「是」

後記:Visual Studio 2008 Express(包括了VC),她有分方案和專案,一個方案可以包括一個以上的專案,這些專案可以用VC或VB來寫,或是一個DLL的專案,上面的例子,是兩個方案(各擁有一個專案),透過手動的方式來組合,如果一個方案包括兩個專案,一個是testdll,一個是testmain,則這個IDE會幫你處理一些事,但使用者還是要有些設定...
Step1  在方案的階層,將這兩個專案建立或加入
Step2  testdll.h需要放在各自source(.cpp .h放的地方)的目錄,然後testdll專案需要定義DLL_EXPORT
Step3  testmain專案"設定為啟始專案","專案相依性"設定為testmain相依testdll
PS : 上面提到lib的加入(進入屬性頁面,組態屬性->連結器->輸入,其他相依性,輸入testdll.lib,確定),不需要...

寫這篇真的是服務的心態(對於初學者),也許也希望對於DLL的編譯有個完整性的介紹,不過抓這麼多圖,是有點無聊,佔頁面,不過沒辦法,不然就乾脆不寫了

最近"Google 文件"對於Blogger的輸出,一些bug,有改善了(像是之前圖檔會亂跑,增加許多空白行...),所以這篇文章也算是對"Google 文件"的測試,看來應該是可以重回"Google 文件"的懷抱了

相關連結:
http://genewince.blogspot.com/2008/03/visual-c-dll-gene.html
http://www.wretch.cc/blog/MtvBoy/21514680
http://logix4u.net/Programming/vc++/A_Tutorial_on_creating_DLLs_with_VC++.html

沒有留言:

張貼留言