Artigo: 192693 - Última revisão: quinta-feira, 24 de Fevereiro de 2005 - Revisão: 2.4

Erro de licença com controlo de ActiveX adicionado em tempo de execução

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Se criar uma aplicação que utiliza um controlo ActiveX que adicionar em tempo de execução com sintaxe semelhante à seguinte:
   THISFORM.AddObject("myctrl","olecontrol","mscomctllib.listviewctrl.2")
				
depois que criar esta aplicação num ficheiro executável, criar uma distribuição com o Assistente de configuração ou InstallShield Express para o Visual FoxPro Edition e instalar a aplicação noutros computadores, quando tenta executar código semelhante ao código anterior recebe um erro semelhante ao seguinte:
   Program Error
   OLE error code 0x80040112: Appropriate license for this class not found.
				

Causa

Uma distribuição criada com o Assistente de configuração de Visual FoxPro ou InstallShield Express só permite uma licença de tempo de execução, enquanto o método AddObject requer uma licença de estrutura.

Resolução

Adicione o controlo que pretende utilizar para uma classe que é guardada numa biblioteca de classes Visual ou para uma classe criada com o comando Definir CLASS. Em seguida, adicione uma instância da classe em tempo de execução em vez de adicionar o controlo. Consulte a secção "Mais informação" para obter detalhes.

No Visual FoxPro 7.0 e posteriores consulte o tópico de ficheiro ? AddObject ? ajuda para uma solução nesses produtos.

Mais Informação

Passos para reproduzir o comportamento

O exemplo seguinte demonstra a utilizar o comando Definir CLASS para criar um OleControl subclassed e adiciona OleControl subclassed em tempo de execução.
  1. Cole o seguinte código num ficheiro de programa (.prg):
          PUBLIC oform1
          oform1=CREATEOBJECT("form1")
          oform1.Show
          READ EVENTS
          RETURN
    
          DEFINE CLASS form1 AS form
             AutoCenter = .T.
             cNextKey = "1_"
             Name = "Form1"
             Caption = "Treeview Demo Form"
    
             ADD OBJECT cmdExit AS commandbutton WITH ;
                Top = 204, ;
                Left = 276, ;
                Height = 27, ;
                Width = 84, ;
                Caption = "E\<xit"
    
             ADD OBJECT cmdAddLV AS commandbutton WITH ;
                Top = 204, ;
                Left = 10, ;
                Height = 27, ;
                Width = 106, ;
                Caption = "Add Listview"
    
             ADD OBJECT cmdAddLVClass AS commandbutton WITH ;
                Top = 204, ;
                Left = 130, ;
                Height = 27, ;
                Width = 136, ;
                Caption = "Add Listview Subclass"
    
             PROCEDURE Destroy
                CLEAR EVENTS
             ENDPROC
    
             PROCEDURE cmdExit.Click
                thisform.release()
             ENDPROC
    
             PROCEDURE cmdAddLV.Click
    
               * The following AddObject causes the error.
            Thisform.AddObject('Lv1','olecontrol','mscomctllib.listviewctrl.2')
            Thisform.SetLVProps()
    
             ENDPROC
    
             PROCEDURE cmdAddLVClass.Click
                * The following code shows the workaround. The class OC1 is
                * defined in the last 3 lines of this program.
                * Alternanely, you could use an object stored in a Visual Class
                * library (.vcx) file.
    
             Thisform.NewObject('LV1','OC1')
    
                Thisform.SetLVProps()
             ENDPROC
    
             PROCEDURE SetLVProps
                thisform.setall('enabled', .F.,'commandbutton')
                WITH thisform.LV1
                   .visible = .t.
                   .height = 190
                   .left = 75
                   .width = 250
                   .view = 2
                   .listitems.add(,,"List Item 1",,)
                   .listitems.add(,,"List Item 2",,)
                ENDWITH
                thisform.cmdExit.enabled = .t.
                thisform.cmdExit.setfocus()
             ENDPROC
          ENDDEFINE
    
          DEFINE class OC1 as olecontrol
             OleClass = 'mscomctllib.listviewctrl.2'
          ENDDEFINE
    						
  2. Adicionar o programa a um projecto e criar o projecto para um executável (exe). Nome lvtest.exe ficheiro.
  3. Crie um directório denominado TestDir e coloque uma cópia do ficheiro executável a partir do passo 2 anterior para o directório.
  4. Execute o Assistente de configuração Visual FoxPro.
  5. Na caixa de diálogo Assistente de configuração, o "Passo 1 localizar ficheiros" é apresentado na caixa de listagem. Na caixa de texto de ficheiros de distribuição seleccione TestDir directório criado no passo 3, clique em seleccionar e, em seguida, clique em Seguinte.
  6. Na caixa de diálogo Assistente de configuração, o "Passo 2 especifica Components" é apresentado na caixa de texto. No grupo de opção componentes de aplicações, seleccione a caixa de verificação "Tempo de execução do Visual FoxPro".
  7. Em seguida, seleccione a caixa de verificação de controlos ActiveX. A adicionar é apresentada caixa de diálogo controlos ActiveX.
  8. Percorra a caixa de listagem "Seleccionar controlos ActiveX para instalar", seleccione "Microsoft ListView Control, versão 6.0", clique no botão Fechar para sair da caixa de diálogo e, em seguida, clique em Seguinte.
  9. No passo "Passo 3 criar disco imagem Directory" do Assistente de configuração de, seleccione ou escreva o nome do directório que pretende utilizar para a criação de imagens de disco e, em seguida, clique em Seguinte.
  10. "Passo 4 especificar opções de configuração", da caixa de diálogo Assistente de configuração, escreva "ListView teste App" na caixa de texto "Legenda de caixa de diálogo programa de configuração" e escreva "Nenhum" na caixa de texto de informações de copyright e clique em Seguinte.

    NOTA: Em cada caso, escreva o texto sem as aspas.
  11. No passo do Assistente de configuração do "Passo 5 especificar predefinido destino" diálogo caixa, clique em Seguinte.
  12. Na caixa de texto "Passo 6 alterar ficheiros Settings", no Assistente de configuração caixa de diálogo, seleccione a produto PM caixa de verificação na grelha junto a Lvtest.exe (o nome do ficheiro executável).
  13. Na caixa de diálogo "Item de menu do programa grupo", escreva "ListView teste App" na caixa de texto Descrição e "% s\lvtest.exe" na linha de comando de caixa de texto.

    Nota Omita as aspas.

    Clique em OK para fechar a caixa de caixa de diálogo programa grupo menu item, clique em Seguinte e, em seguida, clique em Concluir para concluir a executar o Assistente de configuração.
  14. Na caixa de diálogo "Assistente de configuração do disco estatísticas", clique em concluído.
  15. Os ficheiros de distribuição serão num subdirectório do directório listado em "Passo 3 - criar disco imagem Directory". O subdirectório chama disk144. Pode instalar a distribuição que criou, copiando o conteúdo dos directórios disco 1 Disk2, Disk3 e Disk4 para disquetes e, em seguida, execute o programa Setup.exe a partir de disquete primeiro. Também pode ligar ao computador que contém a distribuição através de uma rede para executar o programa de configuração. A instalação deve ser num computador que ainda não tenha Visual FoxPro 6.0 ou Visual Studio 6.0 instalado.
  16. No computador de instalação, a partir da barra de tarefas do Windows, seleccione Iniciar, aponte para programas e, em seguida, aponte para aplicações do Visual FoxPro. Faça clique sobre o item de programa aplicações de teste de ListView.
  17. Quando a aplicação é iniciada, clique no botão Adicionar lista. Ocorre um erro semelhante à que está listado na secção "Sintomas".
  18. Seleccione ' Cancelar ' e repita o passo 16. Desta vez, clique em lista Adicionar subclasse botão e o erro não ocorre.
O exemplo anterior utiliza uma subclasse da classe OleControl chamada OC1. Este subclasse programaticamente é criado com o comando Definir CLASS contido as últimas três linhas de código no exemplo de programa.

Em alternativa, pode criar uma subclasse da classe OleControl com o estruturador visual da classe. Eis os passos para realizar esta tarefa:

  1. Escreva o seguinte na janela de comandos:
          CREATE CLASS
    								
  2. Na caixa de diálogo nova classe, escreva um nome de classe. Pode utilizar OC1 seja consistente com o anterior exemplo.
  3. Seleccione OleControl na caixa de lista com base no.
  4. Na caixa de texto guardar em, escreva o nome de um ficheiro .vcx para armazenar a classe ou seleccione um ficheiro .vcx existente depois de premir a elipse botão [...]. Utilize OCTest para os fins deste exemplo.
  5. Clique no botão OK para criar a classe.
  6. Na caixa de diálogo Inserir objecto, seleccione o botão de opção Criar controlo. Na lista Tipo de objecto, seleccione o controlo ActiveX que pretende utilizar. Para ser consistente com o exemplo anterior, seleccione o "Microsoft ListView Control, versão 6.0" e, em seguida, clique em OK. Apresenta a nova classe no Estruturador da classe. Agora pode guardar a classe.
  7. O seguinte código vai adicionar uma instância do objecto em tempo de execução no exemplo anterior:
          Thisform.NewObject('LV1','OC1', 'OCTest.vcx')
    								
Tem de ter a certeza que o ficheiro .vcx foi adicionado ao projecto antes de criar o .exe, para que o comando NewObject funcione correctamente.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition
  • Microsoft Visual FoxPro 9.0 Professional Edition
Palavras-chave: 
kbmt kbbug kbcode kbpending KB192693 KbMtpt
Tradução automáticaTradução automática
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 192693  (http://support.microsoft.com/kb/192693/en-us/ )