Partilhar via


Classe CComCoClass

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe fornece métodos para criar instâncias de uma classe e obter as suas propriedades.

Sintaxe

template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass

Parâmetros

T
A sua classe, derivada de CComCoClass.

PCLSID
Um apontador para o CLSID do objeto.

Membros

Métodos Públicos

Nome Description
CComCoClass::CreateInstance (Estática) Cria uma instância da classe e consulta uma interface.
CComCoClass::Erro (Estática) Devolve informações de erro avançadas ao cliente.
CComCoClass::GetObjectCLSID (Estática) Devolve o identificador de classe do objeto.
CComCoClass::GetObjectDescription (Estática) Anular para devolver a descrição do objeto.

Observações

CComCoClass fornece métodos para recuperar o CLSID de um objeto, definir informação de erro e criar instâncias da classe. Qualquer classe registada no mapa de objetos deve ser derivada de CComCoClass.

CComCoClass Também define a fábrica de classes padrão e o modelo de agregação para o seu objeto. CComCoClass Utiliza os seguintes dois macros:

Podes sobrescrever qualquer um destes valores definidos especificando outra macro na definição da tua classe. Por exemplo, para usar CComClassFactory2 em vez de CComClassFactory, especificar a 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

Requerimentos

Cabeçalho: atlcom.h

CComCoClass::CreateInstance

Use estas CreateInstance funções para criar uma instância de um objeto COM e recuperar um ponteiro de interface sem usar a API COM.

template <class Q>
static HRESULT CreateInstance(Q** pp);

template <class Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);

Parâmetros

Q
A interface COM que deve ser devolvida via pp.

punkOuter
[dentro] O desconhecido exterior ou desconhecido controlador do conjunto.

pp
[fora] O endereço de uma variável ponteiro que recebe o ponteiro de interface solicitado se a criação for bem-sucedida.

Valor de retorno

Um valor HRESULT padrão. Consulte CoCreateInstance no SDK do Windows para uma descrição dos possíveis valores de retorno.

Observações

Use a primeira sobrecarga desta função para a criação típica de objetos; Use a segunda sobrecarga quando precisar de agregar o objeto que está a ser criado.

A classe ATL que implementa o objeto COM requerido (ou seja, a classe usada como primeiro parâmetro modelo para o CComCoClass) deve estar no mesmo projeto do código chamador. A criação do objeto COM é realizada pela fábrica da classe registada para esta classe ATL.

Estas funções são úteis para criar objetos que impediste que fossem criáveis externamente ao usar a macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO . Também são úteis em situações em que se quer evitar a API COM por razões de eficiência.

Note que a interface Q deve ter um IID associado que possa ser recuperado usando o operador __uuidof .

Example

No exemplo seguinte, CDocument é uma classe ATL gerada por assistente derivada de CComCoClass que implementa a IDocument interface. A classe é registada no mapa de objetos com a macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO, por isso os clientes não podem criar instâncias do documento usando o CoCreateInstance. CApplication é uma CoClass que fornece um método numa das suas próprias interfaces COM para criar instâncias da classe document. O código abaixo mostra como é fácil criar instâncias da classe document usando o CreateInstance membro herdado da CComCoClass classe base.

STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
   *ppDoc = NULL;
   return CMyDoc::CreateInstance(ppDoc);
}

CComCoClass::Erro

Esta função estática configura a IErrorInfo interface para fornecer informação de erro ao 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
[dentro] A cadeia que descreve o erro. A versão Unicode de Error especifica que o lpszDesc é do tipo LPCOLESTR; a versão ANSI especifica um tipo de LPCSTR.

IID
[dentro] O IID da interface que define o erro ou GUID_NULL (o valor padrão) se o erro for definido pelo sistema operativo.

hRes
[dentro] O HRESULT que quer devolver ao chamador. O valor padrão é 0. Para mais detalhes sobre hRes, consulte Observações.

nID
[dentro] O identificador de recurso onde está armazenada a cadeia de descrição do erro. Este valor deve situar-se entre 0x0200 e 0xFFFF, inclusivamente. Em builds de depuração, um ASSERT resultará se o nID não indexar uma cadeia válida. Nas versões de release, a cadeia de descrição de erro será definida como "Erro Desconhecido."

dwHelpID
[dentro] O identificador de contexto da ajuda para o erro.

lpszHelpFile
[dentro] O caminho e o nome do ficheiro de ajuda que descrevem o erro.

hInst
[dentro] A alavanca do recurso. Por defeito, este parâmetro é _AtlModule::GetResourceInstance, onde _AtlModule é a instância global do CAtlModule.

Valor de retorno

Um valor HRESULT padrão. Para obter detalhes, consulte Observações.

Observações

Para chamar Error, o seu objeto deve implementar a ISupportErrorInfo interface.

Se o parâmetro hRes for diferente de zero, então Error devolve o valor de hRes. Se hRes for zero, então as primeiras quatro versões de Error retorno DISP_E_EXCEPTION. As duas últimas versões devolvem o resultado da macro MAKE_HRESULT(1, FACILITY_ITF,nID).

CComCoClass::GetObjectCLSID

Fornece uma forma consistente de recuperar o CLSID do objeto.

static const CLSID& WINAPI GetObjectCLSID();

Valor de retorno

O identificador de classe do objeto.

CComCoClass::GetObjectDescription

Esta função estática recupera a descrição do texto do teu objeto de classe.

static LPCTSTR WINAPI GetObjectDescription();

Valor de retorno

A descrição do objeto da classe.

Observações

A implementação padrão devolve NULL. Podes sobrepor este método com a macro DECLARE_OBJECT_DESCRIPTION . Por exemplo:

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 é chamado por IComponentRegistrar::GetComponents. IComponentRegistrar é uma interface de Automação que permite registar e desregistar componentes individuais numa DLL. Quando crias um objeto Component Registrar com o ATL Project Wizard, o assistente implementa automaticamente a IComponentRegistrar interface. IComponentRegistrar é normalmente utilizado pelo Microsoft Transaction Server.

Para mais informações sobre o Assistente do Projeto ATL, consulte o artigo Criar um Projeto ATL.

Consulte também

Visão geral da classe