2014-11-05 226 views
0

讓我們說DLL A作爲CRT 8.0.50727.762作爲依賴。此DLL用於與「Use Of MFC」=「使用標準Windows庫」動態鏈接(/ MD)的exe項目中。 DLL和使用該DLL的項目都使用VS 2005,但項目構建機器具有較新的CRT。所以exe文件本身對其清單中的8.0.50727.6195依賴。MSVCRT向後兼容?

現在我有兩個問題:

  • 我的理解是正確的,因爲CRT的版本是向後兼容?

  • 因此,當我部署項目並將CRT程序集版本8.0.50727.6195添加到exe的工作目錄時,它應該可以在任何客戶端上運行,而不管他的WinSXS緩存中有什麼權限?

+1

DLL不能影響EXE的清單,它有它自己的。您的流程中有多個版本的CRT,這非常危險。 DLL的接口必須非常乾淨,不需要調用者需要刪除的交換對象,不會拋出異常,不會像* errno *等依賴於全局CRT狀態。 – 2014-11-05 13:16:18

+0

但是,不應該對舊CRT的DLL請求被重定向到新的一個(exe文件)? – joste 2014-11-06 07:28:51

+1

這是一廂情願的想法,它不會那樣工作。 – 2014-11-06 10:55:09

回答

0

編號CRT或MFC不向後兼容。你必須客戶機上安裝適當的Visual C++運行時,確保:

  • 版本應該匹配(VC7,VC8,.. VCl 4等)
  • 位岬應該匹配。如果您的應用程序是32位的,則需要32位可再發行組件,而對於x64則需要32位可再發行組件。
  • 服務包版本也必須匹配!

應該指出,它們都可以共存! VC10 RTM,VC10 SP2,VC10 x64 RTM ..都可以共存。