Clase CComCoClass
Esta clase proporciona métodos para crear instancias de una clase y obtener sus propiedades.
Sintaxis
template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass
Parámetros
T
La clase, que se deriva de CComCoClass
.
pclsid
Puntero al CLSID del objeto.
Miembros
Métodos públicos
Nombre | Descripción |
---|---|
CComCoClass::CreateInstance | (Estático) Crea una instancia de la clase y las consultas para una interfaz. |
CComCoClass::Error | (Estático) Devuelve información detallada del error al cliente. |
CComCoClass::GetObjectCLSID | (Estático) Devuelve el identificador de clase del objeto. |
CComCoClass::GetObjectDescription | (Estático) Invalide para devolver la descripción del objeto. |
Comentarios
CComCoClass
proporciona métodos para recuperar el CLSID de un objeto, establecer información del error y crear instancias de la clase. Cualquier clase registrada en el mapa de objetos debe derivarse de CComCoClass
.
CComCoClass
también define el generador de clases predeterminado y el modelo de agregación para el objeto. CComCoClass
usa las dos siguientes macros:
DECLARE_CLASSFACTORY Declara el generador de clases como CComClassFactory.
DECLARE_AGGREGATABLE Declara que el objeto se puede agregar.
Puede reemplazar cualquiera de estos valores predeterminados especificando otra macro en la definición de clase. Por ejemplo, para usar CComClassFactory2 en vez de CComClassFactory
, especifique la macro DECLARE_CLASSFACTORY2:
class ATL_NO_VTABLE CMyClass2 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyClass2, &CLSID_MyClass>,
public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
DECLARE_CLASSFACTORY2(CMyLicense)
// Remainder of class declaration omitted
Requisitos
Encabezado: atlcom.h
CComCoClass::CreateInstance
Use estas funciones CreateInstance
para crear una instancia de un objeto COM y recuperar un puntero de interfaz sin usar la API de COM.
template <class Q>
static HRESULT CreateInstance( Q** pp);
template <class Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);
Parámetros
Q
La interfaz COM que se debe devolver a través de pp.
punkOuter
[in] Desconocido externo o controlador del agregado.
pp
[out] Dirección de una variable de puntero que recibe el puntero de interfaz solicitado si la creación se realiza correctamente.
Valor devuelto
Valor HRESULT estándar. Consulte CoCreateInstance en Windows SDK para obtener una descripción de los posibles valores devueltos.
Comentarios
Utilice la primera sobrecarga de esta función para la creación típica de objetos; use la segunda sobrecarga cuando necesite agregar el objeto que se va a crear.
La clase ATL que implementa el objeto COM necesario (es decir, la clase usada como primer parámetro de plantilla para CComCoClass) debe estar en el mismo proyecto que el código que realiza la llamada. La creación del objeto COM se lleva a cabo mediante el generador de clases registrado para esta clase ATL.
Estas funciones son útiles para crear objetos mediante la macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO, si usted ha impedido que se puedan crear externamente. También son útiles en situaciones en las que desea evitar la API de COM en busca de una mayor eficacia.
Tenga en cuenta que la interfaz Q debe tener un IID asociado que se pueda recuperar mediante el operador __uuidof.
Ejemplo
En el ejemplo siguiente, CDocument
es una clase ATL generada por el asistente y derivada de CComCoClass
, que implementa la interfaz IDocument
. La clase se registra en el mapa de objetos con la macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO para que los clientes no puedan crear instancias del documento mediante CoCreateInstance. CApplication
es una CoClass (coclase) que proporciona un método en una de sus propias interfaces COM para crear instancias de la clase de documento. El código siguiente muestra lo fácil que es crear instancias de la clase de documento mediante el miembro CreateInstance
heredado de la clase base CComCoClass
.
STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
*ppDoc = NULL;
return CMyDoc::CreateInstance(ppDoc);
}
CComCoClass::Error
Esta función estática configura la interfaz IErrorInfo
para proporcionar información de error al cliente.
static HRESULT WINAPI Error(
LPCOLESTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
LPCOLESTR lpszDesc,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
LPCSTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
LPCSTR lpszDesc,
DWORD dwHelpID,
LPCSTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
static HRESULT WINAPI Error(
UINT nID,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance ());
static HRESULT Error(
UINT nID,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());
Parámetros
lpszDesc
[in] La cadena que describe el error. La versión Unicode de Error
especifica que lpszDesc es de tipo LPCOLESTR; la versión ANSI especifica un tipo de LPCSTR.
iid
[in] El IID de la interfaz que define el error o GUID_NULL (el valor predeterminado) si es el sistema operativo el que define el error.
hRes
[in] El parámetro HRESULT que quiere devolver al autor de llamada. El valor predeterminado es 0. Para más información sobre hRes, consulte Comentarios.
Nid
[in] El identificador de recurso donde se almacena la cadena de descripción del error. Este valor debe estar entre 0x0200 y 0xFFFF, ambos inclusive. En las compilaciones de depuración, un valor ASSERT será el resultado si nID no indexa una cadena válida. En las compilaciones de lanzamiento, la cadena de descripción del error se definirá como "Error desconocido".
dwHelpID
[in] El identificador de contexto de ayuda para el error.
lpszHelpFile
[in] La ruta de acceso y el nombre del archivo de ayuda que describe el error.
hInst
[in] El identificador del recurso. De manera predeterminada, este parámetro es _AtlModule::GetResourceInstance
, donde _AtlModule
es la instancia global de CAtlModule.
Valor devuelto
Valor HRESULT estándar. Para conocer más detalles, vea la sección Comentarios.
Comentarios
Para llamar a Error
, el objeto debe implementar la interfaz ISupportErrorInfo
.
Si el parámetro hRes no es cero, Error
devuelve el valor de hRes. Si hRes es cero, las cuatro primeras versiones de Error
devuelven DISP_E_EXCEPTION. Las dos últimas versiones devuelven el resultado de la macro MAKE_HRESULT( 1, FACILITY_ITF, nID )..
CComCoClass::GetObjectCLSID
Proporciona una manera coherente de recuperar el CLSID del objeto.
static const CLSID& WINAPI GetObjectCLSID();
Valor devuelto
Identificador de clase del objeto.
CComCoClass::GetObjectDescription
Esta función estática recupera la descripción del texto del objeto de clase.
static LPCTSTR WINAPI GetObjectDescription();
Valor devuelto
Descripción del objeto de clase.
Comentarios
La implementación predeterminada devuelve NULL. Puede invalidar este método con la macro DECLARE_OBJECT_DESCRIPTION. Por ejemplo:
class ATL_NO_VTABLE CMyDoc :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyDoc, &CLSID_MyDoc>,
public IDocument
{
public:
DECLARE_OBJECT_DESCRIPTION("My Document Object 1.0")
// Remainder of class declaration omitted.
GetObjectDescription
es llamado por IComponentRegistrar::GetComponents
. IComponentRegistrar
es una interfaz de Automation que permite registrar y anular el registro de los componentes individuales de una DLL. Al crear un objeto Registrador de componentes con el Asistente para proyectos ATL, este implementará automáticamente la interfaz IComponentRegistrar
. Microsoft Transaction Server suele utilizar IComponentRegistrar
.
Para obtener más información sobre el Asistente para proyectos ATL, consulte el artículo Crear un proyecto ATL.