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