Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O suporte de licenciamento, um recurso opcional dos controles ActiveX, permite controlar quem pode usar ou distribuir o controle. (Para obter uma discussão adicional sobre problemas de licenciamento, consulte Problemas de licenciamento na atualização de um controle ActiveX existente.)
Importante
ActiveX é uma tecnologia herdada que não deve ser usada para novos desenvolvimentos. Para obter mais informações sobre tecnologias modernas que substituem o ActiveX, consulte Controles ActiveX.
Este artigo aborda os seguintes tópicos:
Os controles ActiveX que implementam o licenciamento permitem que você, como desenvolvedor do controle, determine como outras pessoas usarão o controle ActiveX. Você fornece ao comprador do controle o controle e o arquivo .LIC, com o acordo de que o comprador pode distribuir o controle, mas não o arquivo .LIC, com um aplicativo que utiliza o controle. Isso impede que os usuários desse aplicativo escrevam novos aplicativos que usam o controle, sem primeiro licenciar o controle de você.
Visão geral do licenciamento de controle ActiveX
Para fornecer suporte de licenciamento para controles ActiveX, a classe COleObjectFactory fornece uma implementação para várias funções na IClassFactory2 interface: IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfoe IClassFactory2::CreateInstanceLic. Quando o desenvolvedor do aplicativo contêiner faz uma solicitação para criar uma instância do controle, é feita uma chamada para GetLicInfo para verificar se o arquivo .LIC do controle está presente. Se o controle for licenciado, uma instância do controle pode ser criada e colocada no contêiner. Depois que o desenvolvedor terminar de construir o aplicativo contêiner, outra chamada de função, desta vez para RequestLicKey, é feita. Esta função retorna uma chave de licença (uma cadeia de caracteres simples) para o aplicativo contêiner. A chave retornada é então incorporada no aplicativo.
A figura abaixo demonstra a verificação de licença de um controle ActiveX que será usado durante o desenvolvimento de um aplicativo de contêiner. Como mencionado anteriormente, o programador da aplicação de contêiner deve ter o ficheiro .LIC instalado na máquina de desenvolvimento para criar uma instância do controlo.
Verificação de um controle ActiveX licenciado durante o desenvolvimento
O próximo processo, mostrado na figura a seguir, ocorre quando o usuário final executa o aplicativo contêiner.
Quando o aplicativo é iniciado, uma instância do controle geralmente precisa ser criada. O contêiner faz isso fazendo uma chamada para CreateInstanceLic, passando a chave de licença incorporada como um parâmetro. Uma comparação de cadeia de caracteres é então feita entre a chave de licença incorporada e a própria cópia do controle da chave de licença. Se a correspondência for bem-sucedida, uma instância do controle será criada e o aplicativo continuará a ser executado normalmente. Observe que o arquivo .LIC não precisa estar presente na máquina do usuário de controlo.
Verificação de um controle ActiveX licenciado durante a execução
O licenciamento de controle consiste em dois componentes básicos: código específico na DLL de implementação de controle e o arquivo de licença. O código é composto por duas (ou possivelmente três) chamadas de função e uma cadeia de caracteres, doravante referida como uma "cadeia de licença", contendo um aviso de direitos autorais. Essas chamadas e a cadeia de caracteres de licença são encontradas na implementação de controle (. CPP). O ficheiro de licença, gerado pelo Assistente de Controlo ActiveX, é um ficheiro de texto com uma declaração de direitos de autor. É nomeado usando o nome do projeto com a extensão .LIC, por exemplo, SAMPLE.LIC. Um controlo licenciado deve ser acompanhado pelo arquivo de licença se o seu uso durante o design for necessário.
Criando um controle licenciado
Quando você usa o Assistente de controle ActiveX para criar a estrutura de controle, é fácil incluir suporte de licenciamento. Quando você especifica que o controle deve ter uma licença de tempo de execução, o Assistente de controle ActiveX adiciona código à classe de controle para dar suporte ao licenciamento. O código consiste em funções que usam uma chave e um arquivo de licença para verificação de licença. Essas funções também podem ser modificadas para personalizar o licenciamento de controle. Para obter mais informações sobre a personalização da licença, consulte Personalizando o licenciamento de um controle ActiveX mais adiante neste artigo.
Para adicionar suporte para licenciamento com o Assistente de Controle ActiveX quando você cria seu projeto de controle
- Utilize as instruções em Criação de um controlo ActiveX MFC. A página Configurações do Aplicativo do Assistente de Controle ActiveX contém a opção para criar o controle com a licença de tempo de execução.
O Assistente de Controle ActiveX agora gera uma estrutura de controle ActiveX que inclui suporte básico de licenciamento. Para obter uma explicação detalhada do código de licenciamento, consulte o próximo tópico.
Suporte ao Licenciamento
Quando você usa o Assistente de Controle ActiveX para adicionar suporte de licenciamento a um controle ActiveX, o assistente adiciona ao cabeçalho do controle e aos arquivos de implementação o código necessário para declarar e implementar a capacidade de licenciamento. Esse código é composto por uma VerifyUserLicense função de membro e uma GetLicenseKey função de membro, que substituem as implementações padrão encontradas em COleObjectFactory . Essas funções recuperam e verificam a licença de controle.
Observação
Uma terceira função VerifyLicenseKey de membro não é gerada pelo Assistente de Controle ActiveX, mas pode ser substituída para personalizar o comportamento de verificação da chave de licença.
Estas funções de membro são:
-
Verifica se o controle permite o uso em tempo de design, verificando o sistema para a presença do arquivo de licença de controle. Esta função é chamada pelo framework como parte do processamento
IClassFactory2::GetLicInfoeIClassFactory::CreateInstanceLic. -
Solicita uma chave exclusiva da DLL de controle. Essa chave é incorporada no aplicativo de contêiner e usada posteriormente, em conjunto com
VerifyLicenseKey, para criar uma instância do controle. Esta função é chamada pelo framework como parte do processamentoIClassFactory2::RequestLicKey. -
Verifica se a chave incorporada e a chave exclusiva do controle são as mesmas. Isso permite que o contêiner crie uma instância do controle para seu uso. Esta função é chamada pela estrutura como parte do processamento
IClassFactory2::CreateInstanceLice pode ser substituída para fornecer verificação personalizada da chave de licença. A implementação padrão executa uma comparação de cadeia de caracteres. Para obter mais informações, consulte Personalizando o licenciamento de um controle ActiveX, mais adiante neste artigo.
Modificações no arquivo de cabeçalho
O Assistente de controle ActiveX coloca o seguinte código no arquivo de cabeçalho de controle. Neste exemplo, são declaradas duas funções membro do objeto CSampleCtrlfactory: uma que verifica a presença do ficheiro de controlo .LIC e outra que recupera a chave de licença a ser usada na aplicação que contém o controlo.
BEGIN_OLEFACTORY(CMyAxUICtrl) // Class factory and guid
virtual BOOL VerifyUserLicense();
virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMyAxUICtrl)
Modificações no arquivo de implementação
O Assistente de controle ActiveX coloca as duas instruções a seguir no arquivo de implementação de controle para declarar o nome do arquivo de licença e a cadeia de caracteres de licença:
static const TCHAR BASED_CODE _szLicFileName[] = _T("NVC_MFC_AxUI.lic");
static const WCHAR BASED_CODE _szLicString[] = L"Copyright (c) 2006 ";
Observação
Caso o utilizador modifique szLicString de alguma forma, deverá também modificar a primeira linha no arquivo de controle .LIC, caso contrário, o licenciamento não funcionará corretamente.
O Assistente de Controlo ActiveX coloca o seguinte código no ficheiro de implementação do controlo para definir as funções VerifyUserLicense e GetLicenseKey da classe de controlo.
// CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense -
// Checks for existence of a user license
BOOL CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense()
{
return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName, _szLicString);
}
// CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey -
// Returns a runtime licensing key
BOOL CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey(DWORD /*dwReserved*/,
BSTR FAR* pbstrKey)
{
if (pbstrKey == NULL)
return FALSE;
*pbstrKey = SysAllocString(_szLicString);
return (*pbstrKey != NULL);
}
Finalmente, o Assistente de Controlo ActiveX modifica o ficheiro .IDL do projeto de controlo. A palavra-chave licensed é adicionada à declaração coclass do controle, como no exemplo a seguir:
[uuid(913E450B-E720-4C71-BCDF-71C96EE98FEB), licensed,
helpstring("MyAxUI Control"), control]
coclass NVC_MFC_AxUI
Personalizando o licenciamento de um controle ActiveX
Como VerifyUserLicense, GetLicenseKey, e VerifyLicenseKey são declaradas como funções de membro virtual da classe de fábrica de controle, você pode personalizar o comportamento de licenciamento do controle.
Por exemplo, pode fornecer vários níveis de licenciamento para o controlo substituindo as funções VerifyUserLicense ou funções membro VerifyLicenseKey. Dentro desta função, você pode ajustar quais propriedades ou métodos são expostos ao usuário de acordo com o nível de licença detetado.
Você também pode adicionar código à VerifyLicenseKey função que fornece um método personalizado para informar ao usuário que a criação do controle falhou. Por exemplo, em sua VerifyLicenseKey função de membro, você pode exibir uma caixa de mensagem informando que o controle falhou ao inicializar e por quê.
Observação
Outra maneira de personalizar a verificação de licença do controle ActiveX é verificar o banco de dados de registro para uma chave do Registro específica, em vez de chamar AfxVerifyLicFile. Para obter um exemplo da implementação padrão, consulte a seção Modificações do arquivo de implementação deste artigo.
Para obter discussões adicionais sobre problemas de licenciamento, consulte Problemas de licenciamento na atualização de um controle ActiveX existente.