何からも派生しない 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 によって純粋なインターフェイスが妨げられるのはなぜですか?