Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
DECLARE_CLASSFACTORY Declara a fábrica da classe como CComClassFactory.
DECLARE_AGGREGATABLE Declara que o seu objeto pode ser agregado.
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.