質問
私は何に由来していないIDLのインターフェイスを定義すると、
、MIDLプリコンパイラは、このような(ビジュアルC ++ 2008)のように警告している:
警告MIDL2271:例えばのIUnknown(...)のような別の【目的】インターフェースから派生しなければならない[対象]インターフェイス
私はIUnknownのから派生しない他からの私のインターフェイスを引き出す場合、MIDLは失敗します。
エラーMIDL2257:唯一のIUnknownルートインタフェースとして使用することができる(...)
さて、私の質問:?これはCOMの制限またはMIDLのプリコンパイラです。
私は最近、D3D10ヘッダを見てきた、とd3d10.hは明らかにIDL(MIDLがこの効果にコメントを追加します)を使用して生成されています。そして、すべてのインターフェイスは、何らかの形でのIUnknownから派生します。
しかし、周辺ヘッダ(等d3d10shader.h、d3d10effect.hは、)警告またはここに記載されたエラーをトリガするいくつかは手動で定義されたCOMインターフェイスを含みます。私は、彼らがこれらの制限を回避するために、それらを手動で定義しなければならなかったと仮定することができます。
私は右ですか?なぜMIDLは純粋なインタフェースを防ぐのですか?
解決
のIUnknownから派生していないインタフェースがCOMではありません。これは、メモリ管理およびインタフェース発見を許可する基本的なビルディングブロックです。
のIUnknownから派生ないインタフェースがあるかもしれません。しかし、これらはCOMではありません、彼らは普通のポインタです。
所属していません StackOverflow