1. 程式人生 > >不同版本VS生成的動態庫是否可以相互呼叫?

不同版本VS生成的動態庫是否可以相互呼叫?

結論:只要.net framework版本一致VS2008和VS2017生成的DLL可以相互呼叫。

1.在VS2008中生成DLL檔案

分別生成DEBUG模式的DLL和RELEASE模式的DLL。一般而言,DEBUG的DLL要比RELEASE的DLL所佔空間要大

同樣的程式功能,RELEASE版的大小是18kb,而DEBUG版的大小是91kb。這是因為DEBUG模式中沒有對程式進行優化,保留了大量的除錯用的資訊。在VS2008沒有找到配置成生成64位DLL的設定,這裡預設生成的都是32位的。

2.在VS2017中呼叫VS2008生成的DLL檔案

error:LIK1112

報錯1

這是一種常見的錯誤(LIK1112),這是由於目標機器位數與解決方案平臺不匹配導致的。程式碼和開啟工程屬性-高階-目標機器-x64改為x86,修改後仍然出錯。

2.1 沒有找到DLL

報錯2

解決方法有兩種,第一是將其放入cpp檔案(同時也是工程目錄下),第二可以是VS自動生成的DUBUG(release)目錄下。程式中,如果需要讀取(.txt.dll)或生成檔案,預設狀態都會在.cpp同級目錄下尋找。DLL可以放在VS生成的兩個預設資料夾中(debug或release中)

2.2 DEBUG下呼叫RELESASE的DLL

似乎沒有什麼區別,速度似乎有所提升。

2.3 RELEASE模式呼叫RELEASE’s DLL和DEBUG’s DLL

一切正常。

2.4 位數不對應會怎麼樣?

停止執行,應避免。

3.在VS2017中生成DLL檔案

和在VS2008一樣。對於x86而言,DUBUG版本102kb,RELEASE版本20kb。對於x64而言,DEBUG版本134kb, RELEASE版本25kb,可以看出使用64位DLL的大小比x86版本要大。