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
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