none
Converter CSharp para V.NET RRS feed

  • Pergunta

  • Boa tarde

    Estou tendo que escrever um código que esta em C# para vb.net, escrevi tudo e no vs 2012 não apresenta erro, porém quando executo ele informou que não encontrou um recurso de uma dll, esta bem simples, possui 2 dll:

    Interop.UCSAPICOMLib.dll

    Interop.UCBioBSPCOMLib.dll

    ambas são referencia no projeto em c# e vb.net, vou postar a parte que esta apresentando erro.

    Em C# esta ok e o código é esse:

    using UCSAPICOMLib;
    using UCBioBSPCOMLib;
    private void MainForm_Load(object sender, EventArgs e)
            {
                // create UCSAPI Instance
                ucsAPI = new UCSAPIClass();
    // create UCBioBSP Instance
                ucBioBSP = new UCBioBSPClass();
    
    ucsAPI.EventTerminalConnected += new _DIUCSAPIEvents_EventTerminalConnectedEventHandler(UCSCOMObj_EventTerminalConnected);
    }
    void UCSCOMObj_EventTerminalConnected(int TerminalID, string TerminalIP)
            {
                lbxMessage.Items.Add("<--EventTerminalConnected");
                lbxMessage.Items.Add(string.Format("   +TerminalID:{0}", TerminalID));
                lbxMessage.Items.Add(string.Format("   +TerminalIP:{0}", TerminalIP));
                lbxMessage.Items.Add(string.Format("   +ErrorCode:{0}", this.ucsAPI.ErrorCode));
                txtTerminalID.Text = this.terminalID;
            }

    Em VB.NET o código é esse:

    Imports UCSAPICOMLib
    Imports UCBioBSPCOMLib
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ' create UCSAPI Instance
            ucsAPI = New UCSAPIClass
    ' create UCBioBSP Instance
            ucBioBSP = New UCBioBSPClass
    ' create event handle
            ucsAPI.EventTerminalConnected += New _DIUCSAPIEvents_EventTerminalConnectedEventHandler(AddressOf UCSCOMObj_EventTerminalConnected)
    
    End Sub
    Private Sub UCSCOMObj_EventTerminalConnected(TerminalID As Integer, TerminalIP As String)
            lbxMessage.Items.Add("<--EventTerminalConnected")
            lbxMessage.Items.Add(String.Format("   +TerminalID:{0}", TerminalID))
            lbxMessage.Items.Add(String.Format("   +TerminalIP:{0}", TerminalIP))
            lbxMessage.Items.Add(String.Format("   +ErrorCode:{0}", Me.ucsAPI.ErrorCode))
            txtTerminalID.Text = Me.terminalID
        End Sub

    Quando executo o código em VB.NET apresenta o seguinte erro:

    Public member 'EventTerminalConnected' on type 'UCSAPIClass' not found

    na linha:

    ucsAPI.EventTerminalConnected += New _DIUCSAPIEvents_EventTerminalConnectedEventHandler(AddressOf UCSCOMObj_EventTerminalConnected)

    E não entendo o porque ele informou que não encontra a chamado sendo que em C3 roda redondo.

    Alguém tem idéia?

    segunda-feira, 17 de dezembro de 2012 19:49

Respostas

  • É só a sintaxe de eventos do vb:

    no lugar de:
    ucsAPI.EventTerminalConnected += New _DIUCSAPIEvents_EventTerminalConnectedEventHandler(AddressOf UCSCOMObj_EventTerminalConnected)
    
    ficaria assim:
    AddHandler ucsAPI.EventTerminalConnected, AddressOf UCSCOMObj_EventTerminalConnected
    


    • Marcado como Resposta Alexandre CCarmo terça-feira, 18 de dezembro de 2012 16:46
    terça-feira, 18 de dezembro de 2012 13:07

Todas as Respostas

  • Fala galera

    Estou procurando uma solução para o problema acima mais ainda não consegui se alguém tiver ideia da uma força 

    Obrigado

    terça-feira, 18 de dezembro de 2012 11:36
  • Alexandre, dê uma olhada nesse site: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Espero ter ajudado, abraços!


    Thiago Coelho - Líder das Comunidades .NET Coders e Windows 8 Brasil
    thiagocoelho.net | @thiagokoelho

    terça-feira, 18 de dezembro de 2012 12:41
  • É só a sintaxe de eventos do vb:

    no lugar de:
    ucsAPI.EventTerminalConnected += New _DIUCSAPIEvents_EventTerminalConnectedEventHandler(AddressOf UCSCOMObj_EventTerminalConnected)
    
    ficaria assim:
    AddHandler ucsAPI.EventTerminalConnected, AddressOf UCSCOMObj_EventTerminalConnected
    


    • Marcado como Resposta Alexandre CCarmo terça-feira, 18 de dezembro de 2012 16:46
    terça-feira, 18 de dezembro de 2012 13:07
  • Cara valeu era isso mesmo, muito obrigado
    terça-feira, 18 de dezembro de 2012 16:46
  • Luciano aproveitando o post e sua ajuda, no caso se eu for converter o código abaixo para vb.net como ficaria?

     public event AddCommandListHandle OnAddCommandList;
            public event ShowCommandListHandle OnShowCommandList;
            public event ShowTextMessageHandle OnShowTextMessage;
    
    OnAddCommandList(0, CommandBuf);
    	        // send data
                try
                {
                    m_SerialPort.Write( CommandBuf, 0, 13 );
                }
                catch( Exception e )
                {
                    m_strComErrorMessage = e.Message;
                    return 1;
                }
    
    ...
    
    OnAddCommandList(1, RxCmd);
    OnShowCommandList();
    OnShowTextMessage(string.Format("Checking Baudrate - {0:d} ...", m_nBaudrate));

    terça-feira, 18 de dezembro de 2012 17:55
  • Opa Luciana estou tentando converte esse outro bloco de código acima e não estou conseguindo, você teria como ajudar? 

    Thiago o link que vocÊ passou converte algumas coisas mas igual essas que o Luciano me ajudou ele traduziu exatamente como eu já tinha feito e postei e não funcionou, o meio que o Luciano fez funcionou e essa última que postei também deu problemas, a forma correta deve ser algo parecido com que o Luciano faze deve ter uma forma de escrever em vb.net que é um pouco diferente

    quarta-feira, 19 de dezembro de 2012 11:29
  • Basicamente seria assim:

    Public Event OnAddCommandList As AddCommandListHandle
    Public Event OnShowCommandList As ShowCommandListHandle
    Public Event OnShowTextMessage As ShowTextMessageHandle
    
    OnAddCommandList(0, CommandBuf)
    
    Try
    	m_SerialPort.Write(CommandBuf, 0, 13)
    Catch e As Exception
    	m_strComErrorMessage = e.Message
    	Return 1
    End Try
    
    OnAddCommandList(1, RxCmd)
    OnShowCommandList()
    OnShowTextMessage(String.Format("Checking Baudrate - {0:d} ...", m_nBaudrate))

    Mas se você já tentou converter com a ferramentas e obteve algum erro do compilador, posta aqui para ficar mais fácil identificar o problema.

    quarta-feira, 19 de dezembro de 2012 11:58
  • Velho acho que eu é quem estou fazendo merda nesse último bloco de código, mas referente ao primeiro que vocÊ me ajudou a linha abaixo eu traduzi ela no tradutor, o mesmo deixado aqui pelo Thiago e ficou assim:

    ucsAPI.EventTerminalConnected += New _DIUCSAPIEvents_EventTerminalConnectedEventHandler(AddressOf UCSCOMObj_EventTerminalConnected)

    e não funcionou, a que vocÊ traduziu ficou assim:

    AddHandler ucsAPI.EventTerminalConnected, AddressOf UCSCOMObj_EventTerminalConnected

    e funcionou, por isso nesse novo bloco pensei que eu estava fazendo alguma coisa errada, mas a tradução e o bloco de código que vocÊ postou ficou identico, vou avaliar se não cometi outro erro e posto aqui 

    quarta-feira, 19 de dezembro de 2012 12:19
  • Luciano no de delegades escritos no C# a conversão para vb.net seria como eu fiz abaixo?

    C#:

    public delegate void AddCommandListHandle( byte nFlag, byte[] Command );
        public delegate void ShowCommandListHandle();
        public delegate void ShowTextMessageHandle(string strMessage);
    
    public void AddCommandEventHandle( )
            {
                m_commSocket.OnAddCommandList += this.OnAddCommandList;
                m_commSocket.OnShowCommandList += this.OnShowCommandList;
                m_commSerial.OnAddCommandList += this.OnAddCommandList;
                m_commSerial.OnShowCommandList += this.OnShowCommandList;
            }



    vb.net que converti

    Public Delegate Sub AddCommandListHandle(nFlag As Byte, Command As Byte())
    Public Delegate Sub ShowCommandListHandle()
    Public Delegate Sub ShowTextMessageHandle(strMessage As String)
    Public Sub AddCommandEventHandle()
    	m_commSocket.OnAddCommandList += Me.OnAddCommandList
    	m_commSocket.OnShowCommandList += Me.OnShowCommandList
    	m_commSerial.OnAddCommandList += Me.OnAddCommandList
    	m_commSerial.OnShowCommandList += Me.OnShowCommandList
    End Sub

    No caso da minha tradução o vs 2012 esta me informando o seguinte, que essas linhas:

    m_commSocket.OnAddCommandList += Me.OnAddCommandList
    	m_commSocket.OnShowCommandList += Me.OnShowCommandList
    	m_commSerial.OnAddCommandList += Me.OnAddCommandList
    	m_commSerial.OnShowCommandList += Me.OnShowCommandList

    'Public Event OnAddCommandList(nFlag As Byte, Command() As Byte)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

    Como converter essa parte, pesquisei sobre RaiseEvent mas não consegui usar nos casos acima, provavelmente não entendi como usar

    quarta-feira, 19 de dezembro de 2012 16:50
  • Opa Pessoal 

    Tentei da seguinte forma?

    AddHandler m_commSocket.OnAddCommandList, AddressOf OnAddCommandList

    Não rolo, tentei dessa forma:

    RaiseEvent m_commSocket.OnAddCommandList, AddressOf OnAddCommandList

    Também não rolo

    quarta-feira, 19 de dezembro de 2012 19:02
  • Fala galera blz, ontem fiquei horas tentando trabalhar com esse problema e não consegui resolver, pesquisei sobre o RaiseEvent mas nenhuma solução, se alguém tiver ideia me da uma força por favor
    quinta-feira, 20 de dezembro de 2012 11:39
  • Bom dia Alexandre , meu nome é Jefferson , estou trabalhando com produtos da virdi, sou iniciante nesse assunto, vc poderia me dar um dica sobre FM30 por gentileza ?

    Minha duvida é a seguinte, estou trabalhando com catraca biometrica via tcp/ip , rs232, vi no seus posts acima, e é o que eu preciso.

    Muito obrigado.

    sexta-feira, 26 de abril de 2013 13:36
  • Bom dia Alexandre , meu nome é Jefferson , estou trabalhando com produtos da virdi, sou iniciante nesse assunto, vc poderia me dar um dica sobre FM30 por gentileza ?

    Minha duvida é a seguinte, estou trabalhando com catraca biometrica via tcp/ip , rs232, vi no seus posts acima, e é o que eu preciso.

    Muito obrigado.

    sexta-feira, 26 de abril de 2013 13:38