Partilhar via


CComClassFactory2 Classe

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 implementa a interface IClassFactory2 .

Sintaxe

template <class license>
class CComClassFactory2 : public IClassFactory2,
    public CComObjectRootEx<CComGlobalsThreadModel>,
    public license

Parâmetros

licença
Uma classe que implementa as seguintes funções estáticas:

  • static BOOL VerifyLicenseKey( BSTR bstr );

  • static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );

  • static BOOL IsLicenseValid( );

Membros

Métodos Públicos

Nome Description
CComClassFactory2::CreateInstance Cria um objeto do CLSID especificado.
CComClassFactory2::CreateInstanceLic Dada uma chave de licença, cria-se um objeto do CLSID especificado.
CComClassFactory2::GetLicInfo Recupera informações que descrevem as capacidades de licenciamento da fábrica da classe.
CComClassFactory2::LockServer Tranca a fábrica da classe em memória.
CComClassFactory2::RequestLicKey Cria e devolve uma chave de licença.

Observações

CComClassFactory2 implementa a interface IClassFactory2 , que é uma extensão do IClassFactory. IClassFactory2 Controla a criação de objetos através de uma licença. Uma fábrica de classes a executar numa máquina licenciada pode fornecer uma chave de licença em tempo de execução. Esta chave de licença permite a uma aplicação instanciar objetos quando não existe uma licença de máquina completa.

Os objetos ATL normalmente adquirem uma fábrica de classes derivando do CComCoClass. Esta classe inclui o macro DECLARE_CLASSFACTORY, que declara o CComClassFactory como a fábrica de classes por defeito. Para usar CComClassFactory2, especifica o macro DECLARE_CLASSFACTORY2 na definição da classe do teu objeto. Por exemplo:

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

CMyLicense, o parâmetro modelo para CComClassFactory2, deve implementar as funções VerifyLicenseKeyestáticas , GetLicenseKey, e IsLicenseValid. Segue-se um exemplo de uma classe de licença simples:

class CMyLicense
{
protected:
   static BOOL VerifyLicenseKey(BSTR bstr)
   {
      USES_CONVERSION;
      return !lstrcmp(OLE2T(bstr), _T("My run-time license key"));
   }

   static BOOL GetLicenseKey(DWORD /*dwReserved*/, BSTR* pBstr) 
   {
      USES_CONVERSION;
      *pBstr = SysAllocString( T2OLE(_T("My run-time license key"))); 
      return TRUE;
   }

   static BOOL IsLicenseValid() {  return TRUE; }
};

CComClassFactory2 deriva de ambos CComClassFactory2Base e licença. CComClassFactory2Base, por sua vez, deriva de IClassFactory2 e CComObjectRootEx< CComGlobalsThreadModel >.

Hierarquia de herança

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

Requerimentos

Cabeçalho: atlcom.h

CComClassFactory2::CreateInstance

Cria um objeto com o CLSID especificado e recupera um ponteiro de interface para esse objeto.

STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);

Parâmetros

PUnkOuter
[dentro] Se o objeto está a ser criado como parte de um agregado, então o pUnkOuter deve ser o desconhecido exterior. Caso contrário, pUnkOuter tem de ser NULL.

riid
[dentro] O IID da interface solicitada. Se pUnkOuter for non-NULL, riid deve ser IID_IUnknown.

ppvObj
[fora] Um ponteiro para o ponteiro de interface identificado por riid. Se o objeto não suportar esta interface, ppvObj é definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

Observações

Exige que a máquina esteja totalmente licenciada. Se não existir uma licença de máquina completa, ligue para o CreateInstanceLic.

CComClassFactory2::CreateInstanceLic

Semelhante ao CreateInstance, exceto que requer CreateInstanceLic uma chave de licença.

STDMETHOD(CreateInstanceLic)(
    IUnknown* pUnkOuter,
    IUnknown* /* pUnkReserved
*/,
    REFIID riid,
    BSTR bstrKey,
    void** ppvObject);

Parâmetros

PUnkOuter
[dentro] Se o objeto está a ser criado como parte de um agregado, então o pUnkOuter deve ser o desconhecido exterior. Caso contrário, pUnkOuter tem de ser NULL.

pUnkReservado
[em] Não utilizado. Deve ser NULL.

riid
[dentro] O IID da interface solicitada. Se pUnkOuter for non-NULL, riid deve ser IID_IUnknown.

bstrKey
[dentro] A chave de licença em tempo de execução obtida anteriormente a partir de uma chamada para RequestLicKey. Esta chave é necessária para criar o objeto.

ppvObject
[fora] Um ponteiro para o ponteiro de interface especificado por riid. Se o objeto não suportar esta interface, o ppvObject é definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

Observações

Pode obter uma chave de licença usando o RequestLicKey. Para criar um objeto numa máquina não licenciada, deve chamar CreateInstanceLic.

CComClassFactory2::GetLicInfo

Preenche uma estrutura LICINFO com informação que descreve as capacidades de licenciamento da fábrica de classes.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

Parâmetros

pLicInfo
[fora] Aponta para uma LICINFO estrutura.

Valor de retorno

Um valor HRESULT padrão.

Observações

O fRuntimeKeyAvail elemento desta estrutura indica se, dada uma chave de licença, a fábrica de classes permite a criação de objetos numa máquina não licenciada. O membro fLicVerified indica se existe uma licença de máquina completa.

CComClassFactory2::LockServer

Incrementa e diminui a contagem de bloqueios de módulos chamando _Module::Lock e _Module::Unlock, respetivamente.

STDMETHOD(LockServer)(BOOL fLock);

Parâmetros

fLock
[dentro] Se TRUE, a contagem de bloqueios é incrementada; caso contrário, o número de bloqueios é decrescente.

Valor de retorno

Um valor HRESULT padrão.

Observações

_Module refere-se à instância global do CComModule ou a uma classe derivada dele.

A chamada LockServer permite que um cliente mantenha uma fábrica de classes para que múltiplos objetos possam ser rapidamente criados.

CComClassFactory2::RequestLicKey

Cria e devolve uma chave de licença, desde que o fRuntimeKeyAvail membro da estrutura LICINFO seja VERDADEIRO.

STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);

Parâmetros

dwReservado
[em] Não utilizado. Deve ser zero.

pbstrKey
[fora] Aponta para a chave da licença.

Valor de retorno

Um valor HRESULT padrão.

Observações

É necessária uma chave de licença para chamar o CreateInstanceLic e criar um objeto numa máquina não licenciada. Se fRuntimeKeyAvail for FALSO, então os objetos só podem ser criados numa máquina totalmente licenciada.

Ligue para o GetLicInfo para obter o valor de fRuntimeKeyAvail.

Consulte também

Classe CComClassFactoryAutoThread
CComClassFactorySingleton Class
Classe CComObjectRootEx
CComGlobalsThreadModel
Visão geral da classe