Clase CComPolyObject
Esta clase implementa IUnknown
para un objeto agregado o no agregado.
Sintaxis
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
Parámetros
contained
Clase, derivada de CComObjectRoot o CComObjectRootEx, así como de cualquier otra interfaz que desee admitir en el objeto.
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CComPolyObject::CComPolyObject | Constructor . |
CComPolyObject::~CComPolyObject | El destructor . |
Métodos públicos
Nombre | Descripción |
---|---|
CComPolyObject::AddRef | Incrementa el recuento de referencias del objeto. |
CComPolyObject::CreateInstance | (Estático) Permite crear un nuevo objeto CComPolyObject contained ><sin la sobrecarga de CoCreateInstance. |
CComPolyObject::FinalConstruct | Realiza la inicialización final de m_contained . |
CComPolyObject::FinalRelease | Realiza la destrucción final de m_contained . |
CComPolyObject::QueryInterface | Recupera un puntero a la interfaz solicitada. |
CComPolyObject::Release | Reduce el recuento de referencias del objeto. |
Miembros de datos públicos
Nombre | Descripción |
---|---|
CComPolyObject::m_contained | Delega las llamadas IUnknown a la información externa desconocida si el objeto se agrega o a IUnknown del objeto si el objeto no se agrega. |
Comentarios
CComPolyObject
implementa IUnknown para un objeto agregado o no agregado.
Cuando se crea una instancia de CComPolyObject
, se comprueba el valor del desconocido externo. Si es null, IUnknown
se implementa para un objeto no agregado. Si el desconocido externo no es null, IUnknown
se implementa para un objeto agregado.
La ventaja de usar CComPolyObject
es que evita tener CComAggObject y CComObject en el módulo para controlar los casos agregados y no agregados. Un solo objeto CComPolyObject
controla ambos casos. Esto significa que solo existe una copia de la tabla virtual y una copia de las funciones existentes en el módulo. Si la tabla virtual es grande, esto puede reducir considerablemente el tamaño del módulo. Pero si la tabla virtual es pequeña, el uso de CComPolyObject
puede dar lugar a un tamaño de módulo ligeramente mayor porque no está optimizado para un objeto agregado o no agregado, como sí lo están CComAggObject
y CComObject
.
Si la macro DECLARE_POLY_AGGREGATABLE se especifica en la definición de clase del objeto, CComPolyObject
se usará para crear el objeto. DECLARE_POLY_AGGREGATABLE se declarará automáticamente si usa el Asistente para proyectos ATL para crear un control total o un control de Internet Explorer.
Si se agrega, el objeto CComPolyObject
tiene su propio IUnknown
, independiente de IUnknown
del objeto externo, y mantiene su propio recuento de referencias. CComPolyObject
usa CComContainedObject para delegar en el desconocido externo.
Para obtener más información sobre la agregación, vea el artículo Aspectos básicos de los objetos COM ATL.
Jerarquía de herencia
CComObjectRootBase
IUnknown
CComPolyObject
Requisitos
Encabezado: atlcom.h
CComPolyObject::AddRef
Incrementa el recuento de referencias del objeto.
STDMETHOD_(ULONG, AddRef)();
Valor devuelto
Valor que puede ser útil para los diagnósticos o las pruebas.
CComPolyObject::CComPolyObject
Constructor .
CComPolyObject(void* pv);
Parámetros
pv
[in] Puntero al exterior desconocido si se va a agregar el objeto o null si el objeto no se agrega.
Comentarios
Inicializa el miembro de datos CComContainedObject
, m_contained e incrementa el número de bloqueos del módulo.
El destructor disminuye el recuento de bloqueos del módulo.
CComPolyObject::~CComPolyObject
El destructor .
~CComPolyObject();
Comentarios
Libera todos los recursos asignados, llama a FinalRelease y disminuye el número de bloqueos del módulo.
CComPolyObject::CreateInstance
Permite crear un nuevo objeto CComPolyObjectcontained
>< sin la sobrecarga de CoCreateInstance.
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
Parámetros
pp
[out] Puntero a un puntero CComPolyObject><contained
. Si CreateInstance
no se realiza correctamente, pp se establece en NULL.
Valor devuelto
Valor HRESULT estándar.
Comentarios
El objeto devuelto tiene un recuento de referencias de cero, por lo que se llama inmediatamente a AddRef
y, después, se usa Release
para liberar la referencia en el puntero de objeto cuando haya terminado.
Si no necesita acceso directo al objeto, pero desea crear un nuevo objeto sin la sobrecarga de CoCreateInstance
, use CComCoClass::CreateInstance en su lugar.
CComPolyObject::FinalConstruct
Módulo al que se llama durante las fases finales de la construcción de objetos, realiza cualquier inicialización final en el miembro de datos m_contained.
HRESULT FinalConstruct();
Valor devuelto
Valor HRESULT estándar.
CComPolyObject::FinalRelease
Método al que se llama durante la destrucción de objetos, libera el miembro de datos m_contained.
void FinalRelease();
CComPolyObject::m_contained
Objeto CComContainedObject derivado de su clase.
CComContainedObject<contained> m_contained;
Parámetros
contained
[in] Sa clase, derivada de CComObjectRoot o CComObjectRootEx, así como de cualquier otra interfaz que desee admitir en el objeto.
Comentarios
Las llamadas IUnknown
mediante m_contained
se delegan a la información externa desconocida si el objeto se agrega, o a IUnknown
de este objeto si no se agrega.
CComPolyObject::QueryInterface
Recupera un puntero a la interfaz solicitada.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);
Parámetros
Q
Interfaz COM.
iid
[entrada] Identificador de la interfaz solicitada.
ppvObject
[out] Puntero al puntero de interfaz identificado por iid. Si el objeto no admite esta interfaz, ppvObject se establece como null.
pp
[out] Puntero a la interfaz identificada por __uuidof(Q)
.
Valor devuelto
Valor HRESULT estándar.
Comentarios
Para un objeto agregado, si la interfaz solicitada es IUnknown
, QueryInterface
devuelve un puntero al propio IUnknown
del objeto agregado e incrementa el recuento de referencias. De lo contrario, este método consulta la interfaz a través del miembro de datos CComContainedObject
, m_contained.
CComPolyObject::Release
Disminuye el recuento de referencias del objeto.
STDMETHOD_(ULONG, Release)();
Valor devuelto
En las compilaciones de depuración, Release
devuelve un valor que puede ser útil para los diagnósticos o las pruebas. En compilaciones que no son de depuración, Release
siempre devuelve cero.
Consulte también
CComObjectRootEx (clase)
DECLARE_POLY_AGGREGATABLE
Información general sobre la clase