Usuário com melhor resposta
dll delphi no vb.net

Pergunta
-
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- Marcado como Resposta Ricardo RussoModerator segunda-feira, 14 de janeiro de 2013 12:11
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 -
-
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.
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
Sogi informatique ltée -
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.
-
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
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
Sogi informatique ltée -
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." -
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 -
-
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 -
-
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- Marcado como Resposta Ricardo RussoModerator segunda-feira, 14 de janeiro de 2013 12:11