1

アプリケーションを VS2008 から VS2010 に移行することを検討しています。

「属性付きプログラミング」でいくつかの COM オブジェクトを生成すると、IDL が自動的に生成されます。

両方のファイルのインポート ディレクティブが異なり、VS2010 でコンパイルが失敗します。

VS2008 では、次のようなものが生成されます。

import "docobj.idl";

VS 2010 で

import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\exdisp.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\shldisp.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\prsht.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mshtmhst.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mshtml.idl";
import "c:\program files (x86)\microsoft sdks\windows\v7.0a\include\dimm.idl";
import "c:\program files (x86)\microsoft sdks\windows\v7.0a\include\dispex.idl";

VS2010 で IDL をコンパイルすると、次のエラーが生成されます。

20>  Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555 
20>  Copyright (c) Microsoft Corporation. All rights reserved.
20>  Processing .\_my_idl.idl
20>  _my_idl.idl
20>  Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl
20>  wincrypt.idl
20>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl(47): error MIDL2025: syntax error : expecting a type specification or a storage specifer or a type qualifier near "WCHAR"
20>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl(47): error MIDL2026: cannot recover from earlier syntax errors; aborting compilation
20>LINK : fatal error LNK1240: failed to compile IDL content

「wincrypt.idl」インポート ディレクティブを手動で削除すると、コンパイル エラーが削除されますが、idl は自動生成されるため、これは解決策ではありません。

2 つの IDL が異なる理由と、インポート ディレクティブを追加する責任がある理由がわかりません。またはMIDLコンパイルエラーを修正する方法さえ。

何か案は ?

前もって感謝します。

最大。

4

2 に答える 2

3

欠落しています

 #import "ocidl.idl"

コードで [importidl] 属性を使用して修正できます。

属性付きプログラミングは少し間違いでした。VS2008 の ATL プロジェクト ウィザードのオプションとして削除されたときに、基本的に非推奨になりました。コード ベースを長期間維持するには、コード ベースを削除することを検討してください。それを開始する方法として、自動生成された .idl を使用できます。

于 2010-07-15T15:40:36.893 に答える
1

属性の使い方が[importidl]間違っていたのかもしれませんが、この問題を解決するための Hans の回答を得ることができませんでした。しかし、ここでの修正はうまくいきました。これを stdafx.h ファイルの先頭に追加するだけです。

[idl_quote("import \"ocidl.idl\";")];
于 2013-06-19T18:40:04.700 に答える