Compartilhar via


Controles ActiveX do MFC: Licenciamento de um controle ActiveX

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.

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

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

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

  • VerifyUserLicense

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

  • GetLicenseKey

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

  • VerifyLicenseKey

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

Consulte também

Controles MFC ActiveX
Assistente de controle ActiveX do MFC