Почему именно мне нужен явный прирост при реализации QueryInterface () в объекте с несколькими интерфейсами ()
Предположим, у меня есть класс, реализующий два или более COM-интерфейса:
class CMyClass : public IInterface1, public IInterface2 {
};
Почти каждый документ, который я видел, говорит о том, что когда я реализую QueryInterface () для IUnknown, я явно отклоняюсьэто указатель на один из интерфейсов:
if( iid == __uuidof( IUnknown ) ) {
*ppv = static_cast<IInterface1>( this );
//call Addref(), return S_OK
}
Вопрос в том, почему я не могу просто скопироватьэто?
if( iid == __uuidof( IUnknown ) ) {
*ppv = this;
//call Addref(), return S_OK
}
Документы обычно говорят, что если я сделаю последнее, я нарушу требование, что любой вызов QueryInterface () для того же объекта должен возвращать точно такое же значение.
Я не совсем понимаю это. Имеют ли они в виду, что если я QI () для IInterface2 и вызову QueryInterface () через этот указатель, C ++ пройдетэто немного отличается от того, если я QI () для IInterface2, потому что C ++ будет каждый раз делатьэто указать на подобъект?