ID do artigo: 177575 - Última revisão: quinta-feira, 17 de fevereiro de 2005 - Revisão: 1.2

PROBLEMA: Controles ActiveX passar Variant 1 voltar para Visual FoxPro 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 | Recolher tudo

Sintomas

Quando chamar um método em um controle ActiveX criado com o Microsoft Foundation Classes (MFC), se houver um parâmetro de saída no método com uma variante do tipo, o Visual FoxPro retorna um erro de incompatibilidade de tipo.

Causa

Quando você chamar um método no controle ActiveX e passa uma variável por referência para receber um valor de parâmetro volta do controle ActiveX, Microsoft Visual FoxPro parece usar um tipo de dados de BSTR. Se o parâmetro do método ActiveX é definido como uma variante do MFC com base no controle ActiveX, isso fará com que MFC tentar forçar tipos de dados para coincidir com usando a função VariantChangeType. Esta função retorna o erro de incompatibilidade de tipo.

Resolução

Controles criados com a ActiveX Template Library (ATL) não têm esse problema. Se você criar o controle Microsoft Foundation Classes (MFC), evite usar tipos de dados de parâmetro de variante.

Situação

Esse comportamento é por design.

Mais Informações

Etapas para reproduzir o problema

Criando o servidor

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

Criando o cliente

  1. Crie um novo formulário.
  2. Adicione um objeto de recipiente OLE.
  3. Quando exibe a caixa de diálogo, selecione a opção "Inserir o controle".
  4. Selecione o controle que você acaba de criar com MFC.
  5. Crie um botão de comando no formulário e coloque o código a seguir no evento Click:
    ****Begin Example Code************
          xy=space(0)
          THISFORM.OleControl1.mymethod(@xy)
          *****End Example Code**************
    					
    quando o botão é clicado, o erro de incompatibilidade de tipo ocorre.

Referências

Para obter informações adicionais, leia os seguintes artigos na Base de dados de Conhecimento da Microsoft:

146219  (http://support.microsoft.com/kb/146219/EN-US/ ) Como registrar manualmente um controle ActiveX (.ocx)
139154  (http://support.microsoft.com/kb/139154/EN-US/ ) Controle 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 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: 177575  (http://support.microsoft.com/kb/177575/en-us/ )