2011-08-02 93 views
0

根據MSDN,有版本屬性,但如果指定了錯誤的版本號,VC仍會編譯代碼。例如:VC++:#import指令:如何指定庫版本?

// MSO.DLL (Microsoft Office, Object Library) 
// Office 10.0 => version(2.2) 
// Office 11.0 => version(2.3) 
// Office 12.0 => version(2.4) 
#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" version(123.456) //< wrong version. 

如何強制編譯器在此類代碼上失敗?我只想使用特定版本的類型庫。

回答

1

你不能。該規則在的LoadRegTypeLib解釋說:

的LoadRegTypeLib請求的版本號對那些 在系統註冊表中找到進行比較,並採取下列操作之一:

  • 如果註冊庫的一個完全匹配 均請求主版本號和次版本號,則加載該類型庫爲 。
  • 如果一個或多個註冊類型庫與 請求的主要版本號完全匹配,並且其次要版本號 大於請求的版本號,則加載最小版本號的版本號爲 。
  • 如果沒有註冊類型庫的完全匹配 請求的主版本號(或者如果沒有那些做完全 比賽的主版本號也有一個小版本號 大於或等於所請求的次版本號),然後 LoadRegTypeLib返回一個錯誤。

您的情況符合第二項,而不是第三項。 Microsoft確實花費了大量精力使這些類型的庫向後兼容。不利用它很容易做到。在具有正確類型庫的機器上構建項目。將生成的.tlh和.tli文件複製到您的項目目錄並檢入。將#import替換爲這些文件的#include。