CoCreateInstance gibt E_NOINTERFACE zurück, obwohl die Schnittstelle gefunden wurde
Ich habe eine COM-KlasseCMyCOMServer
implementierenIMyInterface
in einer Anwendung, beide mit korrekten GUIDs.CMyCOMServer::QueryInterface
gibt S_OK zurück (und wandelt sich in den richtigen Typ um), wenn IUnknown oder IMyInterface angefordert werden, andernfalls wird E_NOINTERFACE zurückgegeben.
In einer anderen App auf demselben PC rufe ich an:
HRESULT hr = ::CoCreateInstance(__uuidof(CMyCOMServer), 0, CLSCTX_SERVER,
__uuidof(IMyInterface ),(void **)&pInterface);
Es gibt E_NOINTERFACE zurück. Also nahm ich an, dass ich etwas falsch mache und fügte einen Haltepunkt hinzuCMyCOMServer::QueryInterface
. Ich habe das gefunden, alsCoCreateInstance
wird genannt,QueryInterface
wird mehrmals für verschiedene Schnittstellen ausgelöst:
(IMyInterface *)this
wie erwartet als SchnittstellenzeigerMeine Verwirrung ist also, warum der Aufruf von CoCreateInstance einen NULL-Zeiger und den Rückkehrcode von E_NOINTERFACE zurücklässt, wenn die COM-Server-App die von mir angeforderte Schnittstelle eindeutig zurückgibt.
BEARBEITEN: Meine Client-App ruft beim Start CoInitialize (NULL) auf, dies macht keinen Unterschied.