CComObjectRootEx Class
Esta clase proporciona métodos a la administración del recuento de referencias de objeto ID para los objetos nonaggregated y agregados.
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
Parámetros
- ThreadModel
la clase cuyos métodos implementan el modelo de subprocesos deseado. Puede elegir explícitamente el modelo de subprocesos estableciendo ThreadModel a CComSingleThreadModel, a CComMultiThreadModel, o a CComMultiThreadModelNoCS. Puede aceptar el modelo predeterminado del subproceso servidor estableciendo ThreadModel a CComObjectThreadModel o a CComGlobalsThreadModel.
Members
Métodos
Constructor. |
|
Incrementa el recuento de referencias para un objeto nonaggregated. |
|
Decrementa para un objeto nonaggregated. |
|
Si el modelo de subprocesos es multiproceso, obtiene la propiedad de un objeto de sección crítica. |
|
Si el modelo de subprocesos es multiproceso, propiedad de un objeto de sección crítica. |
métodos de CComObjectRootBase
Reemplace en la clase para realizar cualquier inicialización requerida por el objeto. |
|
Reemplace en la clase para realizar cualquier limpieza necesaria para el objeto. |
|
Incrementa el recuento de referencias para un objeto agregado. |
|
delegados a IUnknown externo de un objeto agregado. |
|
Decrementa para un objeto agregado. |
Funciones de estático
delegados a IUnknown de un objeto nonaggregated. |
|
Denominado durante la inicialización y la finalización de módulo para las clases derivadas enumeradas en el mapa del objeto. |
miembros de datos
Con m_pOuterUnknown, parte de una combinación. Se utiliza cuando el objeto no se agrega para contener el recuento de referencias de AddRef y de Liberar. |
|
Con m_dwRef, parte de una combinación. Se utiliza cuando el objeto se agrega para contener un puntero al desconocido externo. |
Comentarios
administración del recuento de referencias de objeto de los identificadores deCComObjectRootEx para los objetos nonaggregated y agregados. Contiene el recuento de referencias de objeto si el objeto no se suma, y mantiene el puntero a desconocido externo si se está agregando el objeto. Para los objetos agregados, los métodos de CComObjectRootEx se pueden utilizar para controlar el error del objeto interno a la construcción, y proteger el objeto externo de eliminación cuando se publican interfaces internas o el objeto interno se elimina.
una clase que implementa un servidor COM debe heredar de CComObjectRootEx o de CComObjectRoot.
Si la definición de clase especifica la macro de DECLARE_POLY_AGGREGATABLE , ATL crea una instancia de CComPolyObject <CTheClass> cuando se llama a IClassFactory:: CreateInstance . Durante la creación, el valor desconocido externo se comprueba. si es NULL, IUnknown se implementa para un objeto nonaggregated. Si el hecho exterior no se NULL, IUnknown se implementa para un objeto agregado.
si la clase no especifica la macro de DECLARE_POLY_AGGREGATABLE , ATL crea una instancia de CAggComObject <CTheClass> para los objetos agregados o una instancia de CComObject <CTheClass> para los objetos nonaggregated.
La ventaja de utilizar CComPolyObject es que se evita tener CComAggObject y CComObject en el módulo para controlar los casos agregado y nonaggregated. Los controladores de objeto de CComPolyObject ambos casos. Por consiguiente, sólo una copia de vtable y una copia de las funciones existen en el módulo. Si el vtable es grande, esto puede reducir considerablemente el tamaño del módulo. Sin embargo, si el vtable es pequeño, mediante CComPolyObject pueden producir un tamaño ligeramente mayor de módulo porque no se optimiza para un objeto agregado o nonaggregated, al igual que CComAggObject y CComObject.
si se agrega el objeto, IUnknown es implementado por CComAggObject o CComPolyObject. Estas clases delegan QueryInterface, AddRef, y las llamadas de Liberar a OuterQueryInterface, a OuterAddRef, y a OuterRelease de los entity_CComObjectRootEx reenvíe al desconocido externo. Normalmente, se reemplaza CComObjectRootEx::FinalConstruct en la clase para crear cualquier objeto agregado, y reemplaza CComObjectRootEx::FinalRelease para liberar los objetos agregados.
si el objeto no se agrega, IUnknown es implementado por CComObject o CComPolyObject. En este caso, las llamadas a QueryInterface, AddRef, y Liberar se delegan en InternalQueryInterface, a InternalAddRef, y a InternalRelease de los entity_CComObjectRootEx para realizar las operaciones reales.
Requisitos
encabezado: atlcom.h