En programación de computadoras , la interfaz IUnknown es la interfaz fundamental en el Modelo de objetos componentes (COM). La especificación COM [1] exige que los objetos COM deben implementar esta interfaz. Además, todas las demás interfaces COM deben derivarse de IUnknown. IUnknown expone dos características esenciales de todos los objetos COM: gestión de la vida útil del objeto mediante el recuento de referencias y acceso a la funcionalidad del objeto a través de otras interfaces .
Una interfaz IUnknown (o derivada de IUnknown) consiste en un puntero a una tabla de método virtual que contiene una lista de punteros a las funciones que implementan las funciones declaradas en la interfaz, en el orden en que se declaran en la interfaz. Por lo tanto, la sobrecarga de llamadas de invocación en proceso es idéntica a las llamadas a métodos virtuales en C ++. [2]
Métodos
La interfaz IUnknown expone tres métodos : QueryInterface
, AddRef
y Release
: [3]
QueryInterface
permite a la persona que llama recuperar referencias a las interfaces que implementa el componente. Es similar adynamic_cast<>
en C ++ o conversiones en Java y C # . Específicamente, se utiliza para obtener un puntero a otra interfaz, dado un GUID que identifica de manera única esa interfaz (comúnmente conocida como ID de interfaz o IID ). Si el objeto COM no implementa esa interfaz, en su lugar se devuelve un error E_NOINTERFACE.AddRef
se utiliza para incrementar el recuento de referencias cuando un nuevo cliente adquiere el objeto. Devuelve el nuevo recuento de referencias.Release
se utiliza para reducir el recuento de referencias cuando los clientes han terminado de utilizar el objeto. Devuelve el nuevo recuento de referencias. El objeto se borrará a sí mismo durante la liberación cuando el recuento de referencias llegue a cero, lo que significa que la persona que llama nunca debe usar una interfaz después de llamar a Release.
interfaz IUnknown { virtual HRESULT QueryInterface ( REFIID riid , void ** ppvObject ) = 0 ; virtual ULONG AddRef () = 0 ; virtual ULONG Release () = 0 ; };
El ID de interfaz IUnknown se define como un GUID con el valor de {00000000-0000-0000-C000-000000000046}.
Las interfaces de un componente COM son necesarias para exhibir las propiedades reflexivas, simétricas y transitivas . La propiedad reflexiva se refiere a la capacidad de la QueryInterface
llamada en una interfaz determinada con el ID de la interfaz para devolver la misma instancia de la interfaz. La propiedad simétrica requiere que cuando la interfaz B se recupere de la interfaz A mediante QueryInterface
, la interfaz A también se pueda recuperar de la interfaz B. La propiedad transitiva requiere que si la interfaz B se puede obtener de la interfaz A y la interfaz C se puede obtener de la interfaz B, entonces la interfaz C debe poder recuperarse de la interfaz A.
Diverso
- Los componentes diseñados bajo el estándar de componentes visuales ActiveX deben, como mínimo, implementar la interfaz IUnknown. [4]
- IUnknown sirve como la base para Mac OS X 's Core Fundación marco CFPlugIn. [5]
- En el modelo de componentes XPCOM de Mozilla , esta interfaz también se conoce como nsISupports.
Ver también
- IOleObject : esta es la interfaz base para objetos de vinculación e incrustación de objetos (OLE).
- IDispatch : esta interfaz proporciona envío de métodos dinámicos basados en nombres para objetos COM de automatización OLE
- IObjectWithSite : esta interfaz COM permite que un par de objetos padre / hijo se conecten entre sí para implementar un objeto auxiliar del navegador (BHO)
- IInspectable : el tiempo de ejecución de Windows derivado de COM (WinRT) utiliza esta interfaz derivada de IUnknown como interfaz base
Referencias
- ^ La especificación del modelo de objetos componentes , archivada desde el original el 15 de febrero de 2004
- ^ "El modelo de objetos componentes" . microsoft.com . Microsoft. 30 de mayo de 2018 . Consultado el 12 de febrero de 2019 .
- ^ Definición de IUnknown en microsoft.com. Archivado el 11 de julio de 2013 en la Wayback Machine . consultado el 18 de enero de 2008
- ^ Controles ActiveX en microsoft.com ; consultado el 18 de enero de 2008
- ^ Complementos en apple.com ; consultado el 18 de septiembre de 2011
enlaces externos
- COM en C llano