Compartilhar via


Classe CComClassFactory2

Essa classe implementa a interface IClassFactory2.

Sintaxe

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

Parâmetros

license
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 Descrição
CComClassFactory2::CreateInstance Cria um objeto do CLSID especificado.
CComClassFactory2::CreateInstanceLic Dada uma chave de licença, cria um objeto do CLSID especificado.
CComClassFactory2::GetLicInfo Recupera informações que descrevem os recursos de licenciamento da fábrica de classes.
CComClassFactory2::LockServer Bloqueia a fábrica de classes na memória.
CComClassFactory2::RequestLicKey Cria e retorna uma chave de licença.

Comentários

CComClassFactory2 implementa a interface IClassFactory2, que é uma extensão de IClassFactory. IClassFactory2 controla a criação de objeto por meio de uma licença. Uma fábrica de classes em execução em um computador licenciado pode fornecer uma chave de licença em tempo de execução. Essa chave de licença permite que um aplicativo crie uma instância de objetos quando uma licença completa do computador não existe.

Objetos ATL normalmente adquirem uma fábrica de classes derivando de CComCoClass. Essa classe inclui a macro DECLARE_CLASSFACTORY, que declara CComClassFactory como a fábrica de classes padrão. Para usar CComClassFactory2, especifique a macro DECLARE_CLASSFACTORY2 na definição de classe do seu 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 de modelo para CComClassFactory2, deve implementar as funções estáticas VerifyLicenseKey, GetLicenseKey e IsLicenseValid. O exemplo a seguir é 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 CComClassFactory2Base e license. CComClassFactory2Base, por sua vez, deriva de IClassFactory2 e CComObjectRootEx< CComGlobalsThreadModel >.

Hierarquia de herança

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

Requisitos

Cabeçalho: atlcom.h

CComClassFactory2::CreateInstance

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

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

Parâmetros

pUnkOuter
[entrada] Se o objeto estiver sendo criado como parte de uma agregação, pUnkOuter deverá ser o desconhecido externo. Caso contrário, pUnkOuter deve ser NULL.

riid
[in] O IID da interface solicitada . Se pUnkOuter não for NULL, riid deverá ser IID_IUnknown.

ppvObj
[saída] Um ponteiro para o ponteiro da interface identificado por riid. Se o objeto não der suporte a essa interface, o ppvObj será definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Exige que o computador seja totalmente licenciado. Se uma licença completa do computador não existir, chame CreateInstanceLic.

CComClassFactory2::CreateInstanceLic

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

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

Parâmetros

pUnkOuter
[entrada] Se o objeto estiver sendo criado como parte de uma agregação, pUnkOuter deverá ser o desconhecido externo. Caso contrário, pUnkOuter deve ser NULL.

pUnkReserved
[in] Não é usado. Precisa ser NULL.

riid
[in] O IID da interface solicitada . Se pUnkOuter não for NULL, riid deverá ser IID_IUnknown.

bstrKey
[in] A chave de licença em runtime obtida anteriormente em uma chamada para RequestLicKey. Essa chave é necessária para criar o objeto.

ppvObject
[out] Um ponteiro para o ponteiro da interface identificado por riid. Se o objeto não der suporte a essa interface, o ppvObject será definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Você pode obter uma chave de licença usando RequestLicKey. Para criar um objeto em um computador sem licença, você deve chamar CreateInstanceLic.

CComClassFactory2::GetLicInfo

Preenche uma estrutura LICINFO com informações que descrevam os recursos de licenciamento da fábrica de classes.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

Parâmetros

pLicInfo
[out] Ponteiro para uma estrutura LICINFO.

Valor de retorno

Um valor HRESULT padrão.

Comentários

O membro fRuntimeKeyAvail dessa estrutura indica se, dada uma chave de licença, a fábrica de classes permite que objetos sejam criados em um computador sem licença. O membro fLicVerified indica se existe uma licença de computador completa.

CComClassFactory2::LockServer

Incrementa e diminui a contagem de bloqueio do módulo chamando _Module::Lock e _Module::Unlock, respectivamente.

STDMETHOD(LockServer)(BOOL fLock);

Parâmetros

fLock
[entrada] Se TRUE, a contagem de bloqueios será incrementada, caso contrário, a contagem de bloqueios será diminuída.

Valor de retorno

Um valor HRESULT padrão.

Comentários

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

Chamar LockServer permite que um cliente mantenha uma fábrica de classes para que vários objetos possam ser criados rapidamente.

CComClassFactory2::RequestLicKey

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

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

Parâmetros

dwReserved
[in] Não é usado. Deve ser zero.

pbstrKey
[out] Ponteiro para a chave de licença.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Uma chave de licença é necessária para chamar CreateInstanceLic para criar um objeto em um computador sem licença. Se fRuntimeKeyAvail for FALSE, os objetos só poderão ser criados em um computador totalmente licenciado.

Chame GetLicInfo para recuperar o valor de fRuntimeKeyAvail.

Confira também

Classe CComClassFactoryAutoThread
Classe CComClassFactorySingleton
Classe CComObjectRootEx
CComGlobalsThreadModel
Visão geral da aula