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 QueryInterface
verwenden.
Jede Schnittstelle wird von IUnknown
abgeleitet, 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