Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O suporte ao licenciamento, um recurso opcional de controles ActiveX, permite controlar quem pode usar ou distribuir o controle. (Para obter discussões adicionais sobre problemas de licenciamento, consulte Problemas de licenciamento na atualização de um controle ActiveX existente.)
Importante
O ActiveX é uma tecnologia herdada que não deve ser usada para o novo desenvolvimento. Para obter mais informações sobre tecnologias modernas que substituem o ActiveX, consulte Controles ActiveX.
Este artigo discute os seguintes tópicos:
Os controles ActiveX que implementam o licenciamento permitem que você, como desenvolvedor de controle, determine como outras pessoas usarão o controle ActiveX. Você fornece ao comprador de controle o controle e . Arquivo LIC, com o contrato de que o comprador pode distribuir o controle, mas não o . Arquivo LIC, com um aplicativo que usa o controle. Isso impede que os usuários desse aplicativo gravem 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 de contêiner faz uma solicitação para criar uma instância do controle, uma chamada é GetLicInfo feita para verificar se o controle . O arquivo LIC está presente. Se o controle for licenciado, uma instância do controle poderá ser criada e colocada no contêiner. Depois que o desenvolvedor terminar de construir o aplicativo de contêiner, outra chamada de função, desta vez para RequestLicKey, será feita. Essa função retorna uma chave de licença (uma cadeia de caracteres simples) para o aplicativo de contêiner. A chave retornada é inserida no aplicativo.
A figura a seguir demonstra a verificação de licença de um controle ActiveX que será usado durante o desenvolvimento de um aplicativo de contêiner. Conforme mencionado anteriormente, o desenvolvedor de aplicativos de contêiner deve ter o próprio . Arquivo LIC instalado no computador de desenvolvimento para criar uma instância do controle.
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 de contêiner.
Quando o aplicativo é iniciado, uma instância do controle geralmente precisa ser criada. O contêiner faz isso fazendo uma chamada, CreateInstanceLicpassando a chave de licença inserida como um parâmetro. Em seguida, é feita uma comparação de cadeia de caracteres entre a chave de licença inserida 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á sendo executado normalmente. Observe que o . O arquivo LIC não precisa estar presente no computador do usuário de controle.
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 no arquivo de licença. O código é composto por duas (ou possivelmente três) chamadas de função e uma cadeia de caracteres, referida posteriormente como uma "cadeia de caracteres 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 do controle (. Arquivo CPP). O arquivo de licença, gerado pelo Assistente de Controle ActiveX, é um arquivo de texto com uma instrução de direitos autorais. Ele é nomeado usando o nome do projeto com um . Extensão LIC, por exemplo, SAMPLE. LIC. Um controle licenciado deve ser acompanhado pelo arquivo de licença se o uso em tempo de 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 o suporte ao licenciamento. Quando você especifica que o controle deve ter uma licença em 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 ao licenciamento com o Assistente de Controle ActiveX ao criar seu projeto de controle
- Use as instruções na criação de um controle ActiveX MFC. A página Configurações do Aplicativo do Assistente de Controle ActiveX contém a opção de criar o controle com a licença em 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 de licenciamento
Quando você usa o Assistente de Controle ActiveX para adicionar suporte de licenciamento a um controle ActiveX, o Assistente de Controle ActiveX adiciona código que declara e implementa o recurso de licenciamento é adicionado aos arquivos de cabeçalho e implementação de controle. Esse código é composto por uma VerifyUserLicense função membro e uma GetLicenseKey função 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.
Essas funções de membro são:
-
Verifica se o controle permite o uso de tempo de design verificando o sistema quanto à presença do arquivo de licença de controle. Essa função é chamada pela estrutura como parte do processamento
IClassFactory2::GetLicInfoeIClassFactory::CreateInstanceLic. -
Solicita uma chave exclusiva da DLL de controle. Essa chave é inserida no aplicativo de contêiner e usada posteriormente, em conjunto com
VerifyLicenseKey, para criar uma instância do controle. Essa função é chamada pela estrutura como parte do processamentoIClassFactory2::RequestLicKey. -
Verifica se a chave inserida 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. Essa 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 de arquivo de cabeçalho
O Assistente de Controle ActiveX coloca o código a seguir no arquivo de cabeçalho de controle. Neste exemplo, duas funções de membro do CSampleCtrlobjeto factory são declaradas, uma que verifica a presença do controle. Arquivo LIC e outro que recupera a chave de licença a ser usada no aplicativo que contém o controle:
BEGIN_OLEFACTORY(CMyAxUICtrl) // Class factory and guid
virtual BOOL VerifyUserLicense();
virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMyAxUICtrl)
Modificações de 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
Se você modificar szLicString de alguma forma, também deverá modificar a primeira linha no controle. O arquivo LIC ou o licenciamento não funcionarão corretamente.
O Assistente de Controle ActiveX coloca o seguinte código no arquivo de implementação de controle para definir a classe de controle e VerifyUserLicenseGetLicenseKey as funções:
// 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);
}
Por fim, o Assistente de Controle ActiveX modifica o projeto de controle. Arquivo IDL. A palavra-chave licenciada é adicionada à declaração de 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, GetLicenseKeye 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, você pode fornecer vários níveis de licenciamento para o controle substituindo as funções ou VerifyLicenseKey membroVerifyUserLicense. Dentro dessa 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 detectado.
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 de controle ActiveX é verificar o banco de dados de registro para obter 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 de 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.