Artigo: 177575 - Última revisão: quinta-feira, 17 de Fevereiro de 2005 - Revisão: 1.2

PROBLEMA: Controlos ActiveX passar variante * Retroceder para VFP causa erro

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

Quando chamar um método num controlo ActiveX incorporado com o Microsoft Foundation Classes (MFC), se existir um parâmetro out no método com uma variante de tipo, Visual FoxPro devolve um erro de correspondência de tipo.

Causa

Quando chamar um método no controlo ActiveX e transmiti-las uma variável por referência para receber um valor de parâmetro novamente o controlo ActiveX, Microsoft Visual FoxPro parece estar a utilizar um tipo de dados de BSTR. Se parâmetro o método de ActiveX é definido como uma variante no MFC com o controlo ActiveX, isto faz com que MFC tentar utilizar tipos de dados para corresponder ao utilizando a função VariantChangeType. Esta função devolve o erro de erro de correspondência de tipo.

Resolução

Controlos criados com o ActiveX modelo de biblioteca (ATL) não tem este problema. Se criar o controlo no Microsoft Foundation Classes (MFC), evite utilizar tipos de dados de parâmetro de variante.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento

Criar o servidor

  1. Crie um controlo ActiveX MFC utilizando o Assistente de controlo.
  2. Adicionar um método para o controlo:
          void CMyCtrl::MyMethod(VARIANT FAR* m_pVariant)
          {
          }
    					
  3. Criar e registar o controlo.

Criar o cliente

  1. Crie um novo formulário.
  2. Adicione um objecto de contentor OLE.
  3. Quando apresenta a caixa de diálogo, seleccione a opção "Inserir controlo".
  4. Seleccione o controlo incorporado apenas com o MFC.
  5. Crie um botão de comando do formulário e coloque o seguinte código no evento clicar:
    ****Begin Example Code************
          xy=space(0)
          THISFORM.OleControl1.mymethod(@xy)
          *****End Example Code**************
    					
    quando o botão é clicado, o erro de correspondência de tipo ocorre.

Referências

Para obter informações adicionais, consulte os seguintes artigos na base de dados de conhecimento da Microsoft:

146219  (http://support.microsoft.com/kb/146219/EN-US/ ) Como registar manualmente um controlo ActiveX (.ocx)
139154  (http://support.microsoft.com/kb/139154/EN-US/ ) Controlo OLE licenciamento no Visual FoxPro

A informação contida neste artigo aplica-se a:
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition
Palavras-chave: 
kbmt kbprb KB177575 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: 177575  (http://support.microsoft.com/kb/177575/en-us/ )