CoCreateInstance E_NOINTERFACE obwohl-Schnittstelle gefunden wird

Habe ich eine COM-Klasse CMyCOMServer Umsetzung IMyInterface in einer Anwendung, die beide mit der richtigen GUIDs. CMyCOMServer::QueryInterface wird S_OK zurückgeben (und der cast selbst auf die richtige Art), wenn IUnknown oder IMyInterface beantragt wird, sonst ist es E_NOINTERFACE zurückgegeben.

In einer anderen Anwendung auf dem gleichen PC, ich nenne:

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

Es E_NOINTERFACE zurückgegeben. Also bin ich davon ausgegangen, ich mache etwas falsch und habe einen Haltepunkt auf CMyCOMServer::QueryInterface. Ich fand, dass, wenn CoCreateInstance genannt wird, QueryInterface ausgelöst wird mehrere Male mit unterschiedlichen Schnittstellen:

  • Erste, IUnknown ist beantragt - kein problem
  • Dann zahlreiche Schnittstellen wie IMarshall etc. angefordert werden... diese werden nicht unterstützt, so E_NOINTERFACE wird zurückgegeben,
  • Schließlich IMyInterface wird gebeten. Ich überprüfen QueryInterface gibt S_OK zurück und legt (IMyInterface *)this wie die interface-Zeiger ist, wie erwartet

Also meine Verwirrung ist der Grund, warum der Aufruf von CoCreateInstance " ist, lässt mich ein NULL-Zeiger und return-code von E_NOINTERFACE, wenn der COM-server-app ist eindeutig die Rückgabe der Schnittstelle, die ich verlangen?

EDIT: meine client-app CoInitialize(NULL) beim Start, das macht keinen Unterschied.

Nur zur Klarstellung: Ihr COM-server läuft in einer app, und der client in aonother app? Weil das bedeutet, Sie werden in die verschiedenen Prozesse, und das bedeutet wiederum, dass Sie müssen marshalling, möglicherweise benutzerdefinierte.
Ja, das tun Sie. Zwei separate apps-auf 1 PC. Ich hatte nie mess around mit Marshalling, bevor, obwohl, das ist, warum ich bin verwirrt. Ich habe kaum gehört, bevor und ich habe einen fairen Betrag von COM-Entwicklung.

InformationsquelleAutor Mr. Boy | 2009-11-23

Schreibe einen Kommentar