Compartir a través de


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:

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.

Consulte también

Información general sobre la clase