QueryInterface

Хотя существуют механизмы, с помощью которых объект может выразить функциональность, которую он предоставляет статически (до создания экземпляра), базовый механизм COM — использовать IUnknown вызываемый QueryInterfaceметод.

Каждый интерфейс является производным от IUnknownкаждого интерфейса, поэтому каждый интерфейс имеет реализацию QueryInterface. Независимо от реализации, этот метод запрашивает объект с помощью IID интерфейса, к которому вызывающий объект хочет указатель. Если объект поддерживает этот интерфейс, QueryInterface извлекает указатель на интерфейс, а также вызывается AddRef. В противном случае возвращается E_NOINTERFACE код ошибки.

Обратите внимание, что всегда необходимо соблюдать правила подсчета ссылок . При вызове Release указателя интерфейса для уменьшения количества ссылок до нуля не следует использовать этот указатель еще раз. Иногда может потребоваться получить слабую ссылку на объект (т. е. может потребоваться получить указатель на один из его интерфейсов без увеличения количества ссылок), но это недопустимо, вызывая QueryInterface вызов.Release Указатель, полученный таким образом, является недопустимым и не должен использоваться. Это становится очевидным при _ATL_DEBUG_INTERFACES определении, поэтому определение этого макроса является полезным способом поиска ошибок подсчета ссылок.

См. также

Введение в модель COM
QueryInterface: навигация в объекте