QueryInterface
Mimo że istnieją mechanizmy, za pomocą których obiekt może wyrazić funkcje, które zapewnia statycznie (przed utworzeniem wystąpienia), podstawowym mechanizmem COM jest użycie IUnknown
metody o nazwie QueryInterface
.
Każdy interfejs pochodzi z IUnknown
klasy , więc każdy interfejs ma implementację QueryInterface
. Niezależnie od implementacji ta metoda wysyła zapytanie do obiektu przy użyciu IID
interfejsu, do którego obiekt wywołujący chce wskaźnik. Jeśli obiekt obsługuje ten interfejs, QueryInterface
pobiera wskaźnik do interfejsu, a jednocześnie wywołuje metodę AddRef
. W przeciwnym razie zwraca kod błędu E_NOINTERFACE
.
Należy pamiętać, że należy przestrzegać reguł zliczania odwołań przez cały czas. Jeśli wywołasz Release
wskaźnik interfejsu, aby zdekrementować liczbę odwołań do zera, nie należy używać tego wskaźnika ponownie. Czasami może być konieczne uzyskanie słabego odwołania do obiektu (oznacza to, że może być konieczne uzyskanie wskaźnika do jednego z jego interfejsów bez zwiększania liczby odwołań), ale nie jest dopuszczalne, aby to zrobić, wywołując QueryInterface
następnie Release
. Wskaźnik uzyskany w taki sposób jest nieprawidłowy i nie powinien być używany. Jest to bardziej czytelne, gdy _ATL_DEBUG_INTERFACES
jest definiowane, dlatego zdefiniowanie tego makra jest przydatnym sposobem znajdowania błędów zliczania odwołań.
Zobacz też
Wprowadzenie do modelu COM
QueryInterface
: nawigowanie w obiekcie