Como adicionar dinamicamente controles ActiveX que exigem licenças de tempo de execução no Visual C++ .NET ou no Visual C++ 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 816196
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 326651.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 326652.
Este artigo se refere aos seguintes namespaces Microsoft .NET Framework Class Library:
  • System::ComponentModel
  • System::Collections
  • System::Windows::Forms
  • System:: data
  • System::Drawing

NESTA TAREFA

INTRODUÇÃO
Este artigo passo a passo descreve como adicionar manualmente uma licença de tempo de execução para um controle ActiveX que é dinamicamente criado no Microsoft Visual C++ .NET ou no Microsoft Visual C++ 2005. Quando um controle de UserControl contém um ou mais controles que exigem licenças de tempo de execução, o controle de UserControl implicitamente se torna um controle licenciado (um controle que requer uma licença de tempo de execução). No Microsoft Visual Basic 6.0, você pode adicionar manualmente licenças para a coleção de licenças usando o método Licenses.Add() . Para obter mais informações sobre o que o método License.Add() faz no Visual Basic 6.0, consulte a seção References deste artigo.

No Visual C++. NET, a coleção de licenças não existe. Para adicionar dinamicamente o controle de UserControl , você deve incorporar as informações da licença no controle antes de usar o código a seguir: controles
Controls->Add
este artigo presume que o controle requer a licença de tempo de execução está no arquivo MyProject.ocx e que o controle é chamado de MyLicensedControl. MyProject.ocx está localizado na pasta C:\Windows\System32. Como alternativa, você pode usar Mscomctl.ocx para exibir o controle TreeView no formulário.

Back to the top

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Microsoft Visual Studio .NET 2003 ou Microsoft Visual Studio 2005
  • Microsoft .NET framework 1.1 ou posterior
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Programação com o Microsoft Visual C++ .NET ou Microsoft Visual C++ 2005
  • Licenciamento de componentes e controles
Back to the top

Criar um projeto Visual C++.NET

  1. Inicie Microsoft Visual Studio .NET 2003 ou Microsoft Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Em Project Types , clique em Projetos do Visual c++ e, em seguida, clique em Windows Forms Application (. NET) em modelos .

    Observação No Visual Studio 2005, clique em Visual C++ em Tipos de projeto e, em seguida, clique em Windows Forms Application em modelos .
  4. Na caixa nome , digite ActiveXLicense e, em seguida, clique em OK .

    Por padrão, um formulário que é denominado Form1 é criado e aberto no modo de design.
Back to the top

Criar assemblies de interoperabilidade ActiveX

Para criar os dois assemblies de interoperabilidade que você deve ter, digite o seguinte comando no prompt de comando Visual Studio .NET:
/out:C:\temp\AxMyProject.dll aximp "C:\Windows\System32\MyProject.ocx"


AxMyProject.dll é para a classe AxHost . MyProject.dll é para COM Interop.

Se você estiver usando o arquivo Mscomctl.ocx, no prompt de comando, digite o seguinte comando:
/out:C:\temp\AxMSCOMCTL.dll aximp "C:\Windows\System32\MSCOMCTL.ocx"


Observação A parte aximp este comando não gera o assembly de interoperabilidade COM se ele já existir no GAC (cache de assembly global). No arquivo Mscomctl.ocx, o arquivo Mscomctl.dll já existe no GAC. Portanto, o arquivo Mscomctl.dll não é criado novamente. Back to the top

Criar dinamicamente o controle

  1. No Solution Explorer, clique no nó de projeto ActiveXLicense com o botão direito do mouse e, em seguida, clique em Add Reference .
  2. Na caixa de diálogo Add Reference , clique na guia COM .
  3. Clique em Procurar e selecione os assemblies de interoperabilidade do controle ActiveX que você criou em Create ActiveX interop assemblies seção. Esses arquivos devem estar na pasta C:\Temp.
  4. Adicione AxMyProject.dll e MyProject.dll . Quando você adiciona esses arquivos, o IDE do Visual Studio .NET cria uma pasta Temp na pasta de projeto e copia os arquivos para esta pasta.

    Se você estiver usando o arquivo Mscomctl.ocx, adicionar apenas o arquivo Axmscomctl.dll é suficiente.
  5. Adicione um controle Button ao formulário Form1.
  6. Clique duas vezes em button1 para adicionar o manipulador de eventos Button1_Click na janela de código.
  7. Adicione o seguinte código no manipulador de eventos Button1_Click :
    AxMyProject::AxMyLicensedControl*  myControl = new AxMyProject::AxMyLicensedControl();
    se você estiver usando o arquivo Mscomctl.ocx, adicione o seguinte código:
    Axmscomctl::AxTreeView*  myControl = new Axmscomctl::AxTreeView();
    este cria uma nova instância do controle por meio de AxHost.

    Observação Não crie uma nova instância do controle por meio de COM (MyProject.MyLicensedControl novo), porque isso não funcionará no formulário, e você não pode adicionar facilmente a licença.
Back to the top

Adicionar a licença para o controle

  1. Determinar e observe a chave de licença de tempo de execução para o controle. Para o controle MyLicensedControl , a chave de licença é " sopomnvntoqopjolrltjllvj "
  2. Adicione o seguinte código no manipulador de eventos Button1_Click após o código que você adicionou na etapa 7 da Dynamically create the control seção:
    System::Reflection::FieldInfo* f =     __typeof(AxHost)->GetField(S"licenseKey",	static_cast<System::Reflection::BindingFlags>	(System::Reflection::BindingFlags::NonPublic|System::Reflection::BindingFlags::Instance));f->SetValue(myControl, S"sopomnvntoqopjolrltjllvj");
    Observação você deve adicionar o common language runtime oferecem suporte a compilador opção (/ CLR: oldSyntax) no Visual C++ 2005 a compilar com êxito o exemplo de código anterior. Para adicionar a opção de compilador de suporte de tempo de execução idioma comum no Visual C++ 2005, siga estas etapas:
    1. Clique em Project e clique em <ProjectName> propriedades .

      Observação <ProjectName> é um espaço reservado para o nome do projeto.
    2. Expanda Configuration Properties e, em seguida, clique em Geral .
    3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime configuração no painel à direita, clique em Aplicar e em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime oferece suporte à opção do compilador, visite o seguinte site da Microsoft:
    / clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Observação Se você estiver usando o arquivo Mscomctl.ocx, substitua o valor do parâmetro seqüência de caracteres na chamada para a função DefinirValor o valor chave do controle TreeView (9368265E-85FE-11 d 1-8BE3-0000F8754DA1).

    Esse código insere a licença de tempo de execução no controle. Ele cria uma instância do objeto FieldInfo . Nesse caso, você está obtendo o campo licenseKey e definir o campo para o controle myControl . Você deve fazer isso para cada instância de qualquer ActiveX controle requer uma licença de tempo de execução.
Back to the top

Adicionar o controle ao formulário

  1. Adicionar o controle à coleção Controls do formulário e, em seguida, mostrar o controle. Para fazer isso, adicione o seguinte código no manipulador de eventos Button1_Click após o código que você adicionou na etapa 2 de Add the license to the control seção: controles
    Controls->Add(myControl);myControl->Show();
    Observação se a licença não é adicionada ao controle e a licença é necessária, a falha de linha "myControl-> mostrar". A linha "myControl-> mostrar" executa o código que contém a validação da licença. Quando você tenta executar a linha "myControl-> mostrar" sem uma licença válida no modo de depuração, você receberá a seguinte mensagem de erro:
    Ocorreu uma exceção sem tratamento do tipo 'System.ComponentModel.LicenseException' em system.windows.forms.dll informações adicionais: você não tem uma licença para usar este controle ActiveX.
    Ou em tempo de execução, você pode receber uma mensagem de erro semelhante à seguinte:
    Ocorreu uma exceção sem tratamento em seu aplicativo. Você não tem uma licença para usar este controle ActiveX.
  2. Pressione CTRL + SHIFT + B para criar a solução.
  3. Pressione CTRL+F5 para executar o programa.
  4. Clique em button1 para adicionar o controle ActiveX ao formulário.
Back to the top

Solução de problemas

importante Observe o seguinte sobre esta operação:
  • Você deve adicionar a licença para cada ocorrência de cada ActiveX controle requer uma licença de tempo de execução. Por exemplo, se você criar uma segunda instância do controle MyLicensedControl , você precise adicionar a licença também a essa instância.
  • Certifique-se que você possui a chave de licença correto para seu controle. Determinar a chave de licença correto é específico para o controle. Para obter informações adicionais sobre como determinar a chave, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    151771LICREQST.EXE solicitando uma chave de licença de um objeto
    Como alternativa, você pode usar o método Licenses.Add para o controle no programa do Visual Basic 6.0 em um computador que possui a licença no registro. O método Licenses.Add retorna a licença de tempo de execução que ele adicionado como uma seqüência de caracteres; em seguida, você pode usar o método Debug.Print no Visual Basic 6.0 para obter a chave de licença.
Back to the top
Referências
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
241126INFO: Adicionar dinamicamente UserControls que requerem licenças de tempo de execução
188577COMO: O que é a coleção de licenças usada?
190670COMO: Adicionar dinamicamente controles a um formulário com o Visual Basic 6.0
Para obter mais informações sobre licenciamento ActiveX controles, visite os seguintes sites da Microsoft Developer Network (MSDN):Back to the top
Controles de ActiveX, licenças de tempo de execução, solicitação de licença, UserControls, LicenseKey, controle OCX, AxInterop assembly, classe FieldInfo, classe BindingFlags

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 816196 - Última Revisão: 12/08/2015 02:13:13 - Revisão: 2.3

Microsoft .NET Framework 1.1, Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kbwindowsforms kbforms kbdynamic kbdll kbctrl kbcontrol kbcollections kbactivexevents kblicensing kbhowtomaster KB816196 KbMtpt
Comentários