none
dll delphi no vb.net RRS feed

  • Pergunta

  • ola

    tenho uma dll que é usada em delphi, ao fazer o add reference no vb.net ela dá erro.

    Como resolvo este asssunto? ja tentaram fazer o mesmo?

    valeu

    quarta-feira, 31 de outubro de 2012 08:17

Respostas

  • Poste o codigo de sua implementaçao.

    Sobre este erro, podem ser varias coisas:

    http://social.msdn.microsoft.com/Forums/en-US/vbpowerpacks/thread/8789ea67-fbc5-4a7b-a4eb-d4a8a050d5c1

    Outro detalhe, voce possui o codigo fonte Delphi desta DLL? 

    Se sim, ja pensou em reescrever em .NET? as vezes é mais simples.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quinta-feira, 1 de novembro de 2012 10:45
    Moderador

Todas as Respostas

  • Ajudaria se vc nos dissesse o erro e postasse aqui um trecho do seu codigo (declaraçao do uso da DLL e como vc implementou a chamada)

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quarta-feira, 31 de outubro de 2012 13:48
    Moderador
  • O visual studio deixa de responder.

    ao fazer botão direito do rato no projecto e add reference, browse a dll ele fecha o visual studio..

    encrava logo ai

    quarta-feira, 31 de outubro de 2012 13:54
  • Normalmente uma DLL do delphi nao pode ser adicionada diretamente nas referencias do projeto.. Voce tem que fazer isso desta maneira:

    http://stackoverflow.com/questions/4163364/calling-a-delphi-dll-from-a-c-sharp-net-application

    A parte que importa é esta:

            [DllImport("DelphiLibrary.dll", 
                       CallingConvention = CallingConvention.StdCall, 
                       CharSet = CharSet.Ansi)]
            public static extern bool 
                DelphiFunction(int inputInt, string inputString,
                               out int outputInt,
                               int outputStringBufferSize, ref string outputStringBuffer,
                               int errorMsgBufferSize, ref string errorMsgBuffer);
    

    note que a dll é adicionado ao codigo e só vai ser interpretada em tempo de execuçao..Na é adicionada por refencia.

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quarta-feira, 31 de outubro de 2012 14:03
    Moderador
  • isso em vb.net fica como?

    Assim?

    Imports DllImport("DelphiLibrary.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    DelphiFunction(int inputInt, string inputString, out int outputInt, int outputStringBufferSize, ref string outputStringBuffer, int errorMsgBufferSize, ref string errorMsgBuffer);
    Public Class Form1

    Assim da-me erro:

    Error 2 End of statement expected.

    Error 3 Declaration expected.
    quarta-feira, 31 de outubro de 2012 14:11
  • Desculpe.. eu sou programador C# e esqueço de converter para VB

    Fica deste jeito (note que estou usando outra DLL)

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    Public Function GetWindowText(hwnd As IntPtr, <MarshalAs(UnManagedType.LPStr)>lpString As System.Text.StringBuilder, cch As Integer) As Integer
    End Function

    Mas a idéia é a mesma do que em C#... na linha do Dll import, vc diz de onde vem a dll e na linha abaixo o prototipo da funçao. Para saber mais consulte o MSDN Library

    http://msdn.microsoft.com/pt-pt/library/system.runtime.interopservices.dllimportattribute(v=vs.90).aspx

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quarta-feira, 31 de outubro de 2012 14:19
    Moderador
  • ficou assim:

    Imports System
    Imports System.Runtime.InteropServices
    Public Class Form1
    
        <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
        Public Function GetWindowText(ByVal hwnd As IntPtr, <MarshalAs(UnManagedType.LPStr)> ByVal lpString As System.Text.StringBuilder, ByVal cch As Integer) As Integer
        End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
           
        End Sub
    End Class

    mas dá erro em GetWindowText "

    Error 1 'System.Runtime.InteropServices.DllImportAttribute' cannot be applied to instance method."
    quarta-feira, 31 de outubro de 2012 14:36
  • Teste este codigo:

    Imports System
    Imports System.Runtime.InteropServices
    
    Module Example
    
        ' Use DllImport to import the Win32 MessageBox function.
        <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
        Function MessageBox(ByVal hwnd As IntPtr, ByVal t As String, ByVal caption As String, ByVal t2 As UInt32) As Integer 
        End Function 
    
    
        Sub Main()
            ' Call the MessageBox function using platform invoke.
            MessageBox(New IntPtr(0), "Hello World!", "Hello Dialog", 0)
        End Sub 
    
    End Module

    Atençao o codigo acima é uma aplicaçao console

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quarta-feira, 31 de outubro de 2012 14:53
    Moderador
  • para já não dá erro, valeu

    basta escrever o nome da dll ou tenho que especificar o seu caminho de rede?


    quarta-feira, 31 de outubro de 2012 15:11
  • Se a DLL estiver em outro lugar que %System ou junto com o executavel, a resposta é sim.

    Sugiro sempre deixar ela com o executavel (pasta bin)

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quarta-feira, 31 de outubro de 2012 15:19
    Moderador
  • estou quase lá :)

    me dá este erro:

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

    o volume de dados ainda é grand..como posso resolver isto?

    quarta-feira, 31 de outubro de 2012 15:36
  • Poste o codigo de sua implementaçao.

    Sobre este erro, podem ser varias coisas:

    http://social.msdn.microsoft.com/Forums/en-US/vbpowerpacks/thread/8789ea67-fbc5-4a7b-a4eb-d4a8a050d5c1

    Outro detalhe, voce possui o codigo fonte Delphi desta DLL? 

    Se sim, ja pensou em reescrever em .NET? as vezes é mais simples.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    quinta-feira, 1 de novembro de 2012 10:45
    Moderador