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:

Zunächst wird IUnknown angefordert - kein ProblemDann werden mehrere Schnittstellen wie IMarshall usw. angefordert. Diese werden nicht unterstützt, sodass E_NOINTERFACE zurückgegeben wirdSchließlich wird IMyInterface angefordert. Ich überprüfe, dass QueryInterface S_OK zurückgibt und setzt(IMyInterface *)this wie erwartet als Schnittstellenzeiger

Meine 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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage