Partilhar via


Controles ActiveX MFC: Licenciando um controle ActiveX

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.

Controle ActiveX licenciado verificado no desenvolvimento.
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.

Controle ActiveX licenciado verificado na execução.
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

  1. 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:

  • VerifyUserLicense

    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::GetLicInfo e IClassFactory::CreateInstanceLic.

  • GetLicenseKey

    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 processamento IClassFactory2::RequestLicKey.

  • VerifyLicenseKey

    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::CreateInstanceLic e 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.

Ver também

Controles ActiveX MFC
Assistente de controle ActiveX MFC