Como manipular matrizes retornados como uma variante de um objeto COM do Visual Basic

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: 317030
Sumário
Este artigo passo a passo detalha como lidar com a matriz retornada quando você faz uma função chamada para um modelo de objeto de componente (COM) componente que retorna uma matriz contida em um Variant .

No Visual Basic 6.0, Variant é o tipo de dados padrão. No Visual Basic .NET ou no Visual Basic 2005, objeto é o tipo de dados padrão e o tipo de dados Variant não existe.

back to the top

Criar um componente COM no Visual Basic 6.0

Este artigo explica como criar um componente do Visual Basic 6.0 que retorna um Variant que contém uma matriz byte. Este artigo também inclui o aplicativo de cliente Visual Basic .NET ou Visual Basic 2005 e o aplicativo de cliente translation from VPE for Csharp para demonstrar como recuperar os valores da Variant.
  1. Crie um projeto Visual Basic 6.0 ActiveX DLL. Renomear a classe de teste e cole as seguintes linhas de código no módulo de classe:
     Public Function ReturnVariant() As Variant    Dim byteArr() As Byte    Dim Str As String    Str = "This is a String."    ReDim byteArr(0 To Len(Str) - 1)        For i = 1 To Len(Str)        byteArr(i - 1) = CByte(Asc(Mid$(Str, i, 1)))    Next i            ReturnVariant = byteArrEnd Function					
  2. Renomear o projeto "VB6Component", em seguida, salvar e compilar o projeto. Feche o Visual Basic 6.0 (IDE).
back to the top

Criar um cliente de teste no Visual Basic .NET ou no Visual Basic 2005

Escreva um Visual Basic .NET ou um aplicativo de cliente do Visual Basic 2005 que usa o componente criado por você na seção anterior para usar os dados retornados do componente.
  1. Crie um projeto New Windows Application no Visual Basic .NET ou no Visual Basic 2005. O Form1 é criado por padrão. Renomeie o projeto para TestVBClient .
  2. Arraste um controle Button e um controle Label para o formulário.
  3. No Solution Explorer , clique com o botão direito na pasta de referências e clique em Add Reference .
  4. Na caixa de diálogo Add Reference , clique COM o guia e clique em Procurar e localize VB6Component.dll. O componente deve aparecer na lista componentes selecionados . Clique em OK . Você verá uma referência para VB6Component adicionado à lista de referências.
  5. Clique duas vezes no formulário e em seguida, adicione as seguintes linhas de código de exemplo no início:
    Imports VB6ComponentImports System.Text					
  6. No menu Exibir , clique em Other Windows e clique em Pesquisador de objetos . Interop.VB6Component deve aparecer na lista de itens.
  7. Clique duas vezes para expandir Interop.VB6Component e você deve ver o espaço para nome VB6Component.
  8. Clique para selecionar a classe de teste . O painel de membros do Pesquisador de objetos exibe a função ReturnVariant .
  9. Clique na função ReturnVariant e, em seguida, consulte o tipo de dados que a função retorna no painel inferior. O tipo de dados deve ser o objeto .
  10. Alterne para o modo de design para o formulário, clique duas vezes no controle Button e cole seguintes linhas de código no manipulador de Click_Event :
            Dim objRetVal As Object        Dim typ As Type        Dim str As String        Dim byteArr() As Byte        Try            Dim testClass As New VB6Component.TestClass()            objRetVal = testClass.ReturnVariant()            byteArr = CType(objRetVal, Array)            Label1.Text = ASCIIEncoding.ASCII.GetString(byteArr)        Catch Ex As Exception            MessageBox.Show(Ex.Source & ":" & Ex.Message)        End Try					
  11. No menu Build , clique em Criar TestVBClient .
  12. No menu Debug , clique em Iniciar (ou pressione F5).
  13. Clique no botão . O rótulo é preenchido com a seqüência de caracteres "Este é uma seqüência de caracteres".
back to the top

Criar um cliente de teste no translation from VPE for Csharp

Escrever um aplicativo de cliente translation from VPE for Csharp que usa o componente que você criou anteriormente para usar os dados retornados do componente.
  1. Crie um novo projeto Windows Application translation from VPE for Csharp. O Form1 é criado por padrão. Renomeie o projeto "TestCSClient".
  2. Arraste um controle Button e um controle Label para o formulário.
  3. No Solution Explorer , clique com o botão direito na pasta de referências e clique em Add Reference .
  4. Na caixa de diálogo Add Reference , clique COM o guia e clique em Procurar e localize VB6Component.dll. O componente deve aparecer na lista de componentes selecionados. Clique em OK . Você verá uma referência para VB6Component adicionado à lista de referências.
  5. Clique duas vezes no formulário e em seguida, adicione as seguintes linhas de código de exemplo no início:
    using System.Text;using VB6Component;					
  6. Alterne para o modo design para o formulário, clique duas vezes no controle Button e, em seguida, colar as linhas de código de exemplo a seguir no manipulador de Click_Event :
    	object objRetVal;	byte[] byteArr;        	try	{	    TestClass tc = new TestClass();	    objRetVal = tc.ReturnVariant();	    byteArr = (byte[]) objRetVal;	    label1.Text = ASCIIEncoding.ASCII.GetString(byteArr);	} 	    catch(Exception Ex)	{	    MessageBox.Show(Ex.Source + ": " + Ex.Message);	}					
  7. No menu Build , clique em Criar TestCSClient .
  8. No menu Debug , clique em Iniciar (ou pressione F5).
  9. Clique no botão . O rótulo é preenchido com a seqüência de caracteres "Este é uma seqüência de caracteres".
back to the top

Solução de problemas

Se o limite inferior da matriz retornada é definido como qualquer número diferente de zero (0), você receber a seguinte mensagem de erro:
"Uma exceção sem tratamento do tipo 'System.InvalidCastException' ocorreu no AppName.exe"

Obter informações adicionais: especificado a conversão não é válida.
Este erro ocorre porque todas as matrizes no .NET têm um limite inferior zero (0). O limite inferior da matriz que é retornado do aplicativo Visual Basic 6.0 também deve ser definido como zero (0).

back to the top

REFERÊNCIAS

Visual Studio.NET

Interoperating with Unmanaged Code

back to the top
kbinterop, kbarrays, kbvariant

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 317030 - Última Revisão: 12/06/2006 23:18:59 - Revisão: 3.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft Visual Basic 6.0 Professional Edition

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster kbinterop KB317030 KbMtpt
Comentários