CoCreateInstance zwraca E_NOINTERFACE, mimo że interfejs został znaleziony

Mam klasę COMCMyCOMServer realizowanieIMyInterface w jednej aplikacji, obie z poprawnymi identyfikatorami GUID.CMyCOMServer::QueryInterface zwróci S_OK (i rzuci się na właściwy typ), jeśli zażądano IUnknown lub IMyInterface, w przeciwnym razie zwróci E_NOINTERFACE.

W innej aplikacji na tym samym komputerze dzwonię:

HRESULT hr = ::CoCreateInstance(__uuidof(CMyCOMServer), 0, CLSCTX_SERVER,
 __uuidof(IMyInterface ),(void **)&pInterface);

Zwraca E_NOINTERFACE. Zakładałem więc, że robię coś złego i dodałem punkt przerwaniaCMyCOMServer::QueryInterface. Znalazłem to kiedyCoCreateInstance jest nazywany,QueryInterface jest uruchamiany kilka razy dla różnych interfejsów:

Po pierwsze, zażądano IUnknown - nie ma problemuNastępnie żądanych jest kilka interfejsów, takich jak IMarshall ... nie są one obsługiwane, więc zwracany jest E_NOINTERFACENa koniec wymagany jest interfejs IMyInterface. Sprawdzam, czy QueryInterface zwraca S_OK i ustawia(IMyInterface *)this jako wskaźnik interfejsu, zgodnie z oczekiwaniami

Więc moje zamieszanie polega na tym, że wywołujący CoCreateInstance pozostawia mi wskaźnik NULL i kod powrotu E_NOINTERFACE, gdy aplikacja serwera COM wyraźnie zwraca interfejs, o który pytam?

EDYCJA: moja aplikacja kliencka wywołuje CoInitialize (NULL) przy starcie, nie ma to znaczenia.

questionAnswers(4)

yourAnswerToTheQuestion