2011-08-02 18 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はエラーを返します。

あなたの大文字小文字は第3弾ではなく第2番目の小文字に一致します。マイクロソフトは、これらのタイプライブラリを下位互換性にするために多くの努力をしています。それを利用しないのは簡単です。適切なタイプライブラリを持つマシンでプロジェクトをビルドします。生成された.tlhファイルと.tliファイルをプロジェクトディレクトリにコピーしてチェックインします。これらのファイルの#includeに#importを置き換えます。

関連する問題