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:
(IMyInterface *)this
jako wskaźnik interfejsu, zgodnie z oczekiwaniamiWię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.