2

何からも派生しない IDL でインターフェイスを定義すると、MIDL プリコンパイラはそのように警告します (Visual C++ 2008):
警告 MIDL2271: [オブジェクト] インターフェイスは、IUnknown などの別の [オブジェクト] インターフェイスから派生する必要があります (...)

また、IUnknown から派生していない別のインターフェイスからインターフェイスを派生させた場合、MIDL は失敗します:
エラー MIDL2257: ルート インターフェイスとして使用できるのは IUnknown のみです (...)

さて、私の質問: これは COM または MIDL プリコンパイラの制限ですか?

私は最近 D3D10 ヘッダーを見てきましたが、d3d10.h は明らかに IDL を使用して生成されています (MIDL はこの効果にコメントを追加します)。そして、すべてのインターフェイスは何らかの形で IUnknown から派生しています。

ただし、ペリフェラル ヘッダー (d3d10shader.h、d3d10effect.h など) には手動で定義された COM インターフェイスが含まれており、その一部はここで説明する警告またはエラーをトリガーします。これらの制限を回避するために、手動で定義する必要があったとしか思えません。

私は正しいですか?MIDL によって純粋なインターフェイスが妨げられるのはなぜですか?

4

1 に答える 1

2

IUnknown から派生しないインターフェイスは COM ではありません。これは、メモリ管理とインターフェイス検出を可能にする基本的なビルディング ブロックです。

IUnknown から派生していないインターフェイスがある可能性があります。ただし、これらは COM ではなく、通常のポインターです。

于 2008-12-22T10:36:05.887 に答える