QueryInterface

Obwohl es Mechanismen gibt, mit denen ein Objekt die Funktionalität ausdrücken kann, die es statisch bereitstellt (bevor es instanziiert wird), besteht der grundlegende COM-Mechanismus darin, die IUnknown aufgerufene Methode zu QueryInterfaceverwenden.

Jede Schnittstelle wird von IUnknownabgeleitet, sodass jede Schnittstelle eine Implementierung von QueryInterface. Unabhängig von der Implementierung fragt diese Methode ein Objekt mithilfe IID der Schnittstelle ab, auf die der Aufrufer einen Zeiger wünscht. Wenn das Objekt diese Schnittstelle unterstützt, QueryInterface ruft einen Zeiger auf die Schnittstelle ab, während auch aufgerufen wird AddRef. Andernfalls wird der E_NOINTERFACE Fehlercode zurückgegeben.

Beachten Sie, dass Sie bezugszählregeln jederzeit einhalten müssen. Wenn Sie einen Schnittstellenzeiger aufrufen Release , um die Referenzanzahl auf Null zu erhöhen, sollten Sie diesen Zeiger nicht erneut verwenden. Gelegentlich müssen Sie möglicherweise einen schwachen Verweis auf ein Objekt abrufen (d. h., Sie möchten einen Zeiger auf eine seiner Schnittstellen abrufen, ohne die Referenzanzahl zu erhöhen), aber es ist nicht akzeptabel, dies durch Aufrufen QueryInterface von gefolgt von Release. Der auf eine solche Weise abgerufene Zeiger ist ungültig und sollte nicht verwendet werden. Dies wird leichter ersichtlich, wenn _ATL_DEBUG_INTERFACES dieses Makro definiert ist, sodass das Definieren dieses Makros eine nützliche Möglichkeit ist, Verweiszählungsfehler zu finden.

Siehe auch

Einführung in COM
QueryInterface: Navigieren in einem Objekt