不同版本VS生成的動態庫是否可以相互呼叫?
阿新 • • 發佈:2019-02-16
結論:只要.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
這是一種常見的錯誤(LIK1112),這是由於目標機器位數與解決方案平臺不匹配導致的。程式碼和開啟工程屬性-高階-目標機器-x64改為x86,修改後仍然出錯。
2.1 沒有找到DLL
解決方法有兩種,第一是將其放入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版本要大。