VC ++:#import指令:如何指定库版本?

时间:2011-08-02 06:27:40

标签: visual-c++ com import ms-office typelib

根据MSDN,有版本属性,但如果指定了错误的版本号,VC仍会编译代码。例如:

// 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 个答案:

答案 0 :(得分:1)

你做不到。这些规则在LoadRegTypeLib中解释:

  

LoadRegTypeLib将请求的版本号与这些版本号进行比较   在系统注册表中找到,并执行以下操作之一:

     
      
  • 如果其中一个已注册的库与两者完全匹配   请求主要和次要版本号,然后该类型库是   加载。
  •   
  • 如果一个或多个注册类型库完全匹配   请求主版本号,并具有更大的次版本号   比请求的那个,具有最大次要版本号的那个是   加载。
  •   
  • 如果没有注册的类型库完全匹配   请求主要版本号(或者如果没有完全正确的版本号)   匹配主要版本号也有一个次要版本号   那么,大于或等于所要求的次要版本号)   LoadRegTypeLib返回错误。
  •   

你的案子与第二个子弹相匹配,而不是第三个子弹。 Microsoft确实花了很多精力使这些类型库向后兼容。不利用它很容易做到。使用正确的类型库在计算机上构建项目。将生成的.tlh和.tli文件复制到项目目录并检入它们。将#import替换为#includes用于这些文件。