Compartir a través de


Implementación de la interfaz IUnknown

Hace referencia a: Outlook 2013 | Outlook 2016

Los métodos de la interfaz IUnknown , implementados en cada objeto MAPI, admiten la comunicación entre objetos y la administración de objetos.

IUnknown tiene tres métodos: IUnknown::AddRef, IUnknown::QueryInterface y IUnknown::Release. QueryInterface permite que un objeto determine si otro objeto admite una interfaz determinada. Con QueryInterface, dos objetos sin conocimientos previos de la funcionalidad del otro pueden interactuar. Si el objeto que implementa QueryInterface admite la interfaz en cuestión, devuelve un puntero a la implementación de la interfaz. Si el objeto no admite la interfaz solicitada, devuelve el valor MAPI_E_INTERFACE_NOT_SUPPORTED.

Cuando QueryInterface devuelve un puntero de interfaz solicitado, también debe aumentar el número de referencias del nuevo objeto. El recuento de referencias de un objeto es un valor numérico que se usa para administrar la duración del objeto. Cuando el recuento de referencias es mayor que 1, no se puede liberar la memoria del objeto porque se está usando activamente. Solo cuando el recuento de referencias cae a 0, el objeto se puede liberar de forma segura.

Los otros dos métodos IUnknown , AddRef y Release, administran el recuento de referencias. AddRef incrementa el recuento de referencias, mientras que Release lo reduce. Todos los métodos o funciones de API que devuelven punteros de interfaz, como QueryInterface, deben llamar a AddRef para incrementar el número de referencias. Todas las implementaciones de métodos que reciben punteros de interfaz deben llamar a Release para reducir el recuento cuando el puntero ya no sea necesario. La versión comprueba si hay un recuento de referencias existente, liberando la memoria asociada a la interfaz solo si el recuento es 0.

Nota:

Dado que AddRef y Release no son necesarios para devolver valores precisos, los autores de la llamada de estos métodos no deben usar los valores devueltos para determinar si un objeto sigue siendo válido o se ha destruido.

Vea también

Implementación de objetos MAPI