2012-06-18 20 views
5

私のCOMサーバーメソッドからE_NOTIMPLまたはE_NOINTERFACEを返す必要があるかどうか、私は自分自身を混乱させました。E_NOTIMPLとE_NOINTERFACEのどちらを選択するのですか?

私は、継承したクラスからオーバーライドした2つの関数を持つクラスを持っていますが、これらの関数の両方は現時点で実際にはサポートされていないので何もしませんので、 "実装されていません"これらの関数の戻り値は何もありません。

誰もがそれぞれの使い方の経験則を持っていますか?

答えて

6

あなたは全体のインターフェイスを実装するために失敗した場合、誰もがそのメソッドのいずれかを呼び出そうとしないように、そしてあなたのQueryInterfaceが明示的に、E_NOINTERFACEを返すことができ、またはあなただけの(それが実際に意味を持たないE_NOTIMPLを返すことができるすべてのメソッドを作ることができますいくつかのエッジケースでこれを行う)。インターフェイスを部分的に実装する場合は、E_NOINTERFACEを返さないでください。

3

クラスが要求されたインタフェースの完全な実装を提供しない場合は、E_NOINTERFACEを返します。クラスがインタフェース関数のボディ/ロジックを実装していない場合は、E_NOTIMPLを返します。

2

あなたは(正式に)インターフェイスを実装するので、E_NOINTERFACEはあなたのためではありません。有用に実装されていないメソッドがあるので、E_NOTIMPLを返す必要があります。

関連する問題