QueryInterface

Aunque hay mecanismos por los que un objeto puede expresar la funcionalidad que proporciona estáticamente (antes de que tenga instancias), el mecanismo COM fundamental es usar el método IUnknown denominado QueryInterface.

Cada interfaz se deriva de IUnknown, por lo que cada interfaz tiene una implementación de QueryInterface. Independientemente de la implementación, este método consulta un objeto mediante el IID de la interfaz a la que el autor de la llamada desea que vaya dirigido un puntero. Si el objeto admite esa interfaz, QueryInterface recupera un puntero dirigido a la interfaz, al mismo tiempo que llama a AddRef. De lo contrario, devuelve un código de error E_NOINTERFACE.

Tenga en cuenta que debe obedecer las reglas del recuento de referencias en todo momento. Si llama a Release en un puntero de interfaz para decrementar el recuento de referencias a cero, no debe volver a usar ese puntero. En ocasiones, es posible que necesite obtener una referencia débil a un objeto (es decir, es posible que desee obtener un puntero, dirigido a una de las interfaces del objeto, sin incrementar el recuento de referencias), pero no es aceptable hacerlo llamando a QueryInterface seguida de Release. El puntero obtenido de tal manera no es válido y no debe usarse. Esto se vuelve más evidente cuando _ATL_DEBUG_INTERFACES se define, por lo que definir esta macro es una forma útil de encontrar errores de recuento de referencias.

Consulte también

Introducción a COM
QueryInterface: Navegar por un objeto