Podczas implementacji kilku interfejsów COM na raz, jak mogę przekazać do IUnknown?

Załóżmy, że mój obiekt COM implementuje dwa lub więcej interfejsów COM:

class CMyClass : public IPersistFile, public IPersistStream {
};

podczas implementacji QueryInterface () muszę mieć możliwość zwrócenia wskaźnika IUnknown *. Ponieważ oba interfejsy bazowe wywodzą się z IUnknown, nie mogę tego ukryć w sposób dorozumiany - takie zmiany byłyby niejednoznaczne. Aby wyraźnie wyrazić zgodę, muszę użyć jednego z dwóch sposobów:

 if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast<IPersistFile*>( this );
     static_cast<IPersistFile*>( this )->AddRef();
     return S_OK;
 }

lub

 if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast<IPersistStream*>( this );
     static_cast<IPersistStream*>( this )->AddRef();
     return S_OK;
 }

Wygląda na to, że jedynym wymaganiem jest to, że ilekroć QI () jest wywoływane na obiekcie, zwraca ten sam wskaźnik za każdym razem i spełniam ten warunek, jeśli wybiorę dowolny z rzutów i po prostu go trzymam.

Jaki powinienem wybrać i dlaczego?

questionAnswers(4)

yourAnswerToTheQuestion