Visual Basic.NET - Uso de DLL en VB.net

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso de DLL en VB.net

Publicado por Jairo (6 intervenciones) el 07/04/2020 18:03:11
Buenas tardes.

Soy un completo novato en el tema de programación pero me gustaria modificar un programa que tengo escrito en VB6 a VB.net, con el cual uso una DLL que me funciona de 1000 maravillas en VB6 y que era llamada en el formulario asi:

1
Call StringAdd(Resultado, Operand1, Len(Operand1), Operand2, Len(Operand2))

Y en el modulo esta definido asi:

1
Declare Function StringAdd Lib "miarchivo.dll" Alias "_StringAdd@20" (ByVal A As String, ByVal B As String, ByVal bLen As Long, ByVal C As String, ByVal cLen As Long) As Integer

Todo va perfecto en VB6 pero en Visual Studio 2019 no consigo hacer funcionar la DLL.

La he definido de dos maneras, igual que antes y asi:

1
2
3
<System.Runtime.InteropServices.DllImport("miarchivo.dll", EntryPoint:="_StringAdd@20")>
    Public Function StringAdd(ByVal A As String, ByVal B As String, ByVal bLen As Long, ByVal C As String, ByVal cLen As Long) As Integer
    End Function

No se que pasa, pero siempre da este error, cuando compilo:

System.AccessViolationException: 'Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada.'

Alguna idea????
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Uso de DLL en VB.net

Publicado por Nacho (56 intervenciones) el 07/04/2020 19:39:27
De momento tendrás el problema de que la dll funcionará con ascii y vb.net con unicode. Tampoco es muy recomendable usar string como formato, es mejor usar StringBuilder.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso de DLL en VB.net

Publicado por Jairo (6 intervenciones) el 07/04/2020 19:45:24
Si la DLL funciona con ASCII, como puedo usarla en VB.net o es imposible de usar???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de DLL en VB.net

Publicado por Nacho (56 intervenciones) el 07/04/2020 20:17:55
Charset del dllimport.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso de DLL en VB.net

Publicado por Jairo (6 intervenciones) el 07/04/2020 21:46:30
No lo entiendo, podrias ponerme un ejemplo para ver como usar el Charset con ASCII
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de DLL en VB.net

Publicado por Nacho (56 intervenciones) el 09/04/2020 10:07:54
Pásame la dll.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 224
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso de DLL en VB.net

Publicado por gilman (81 intervenciones) el 08/04/2020 10:21:23
En principio, la declaración, si en VB6 funciona correctamente, debería quedar:
1
Declare Function StringAdd Lib "miarchivo.dll" Alias "_StringAdd@20" (ByVal A As String, ByVal B As String, ByVal bLen As Integer, ByVal C As String, ByVal cLen As Integer) As Short
Las cadenas, las trataría correctamente, me imagino que hará las conversiónes necesarias, tal y como hacía en VB6, el problema es con los tipos enteros, el tipo Long de VB6, es Integer en VBNet, y el tipo Integer de VB6 pasa a ser Short en VBNet.
Una cosa que mestraña de la declaración que pones es que no se le pasa la longitud de la cadena A, pero, si en VB6 funciona, con la declaración que te he pasado debería funcionar, no he podido probarlo ya que no dispongo de la dll que usas.

Ya dirás como ha ido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso de DLL en VB.net

Publicado por Jairo (6 intervenciones) el 08/04/2020 14:19:18
Pues todo funciona perfecto ahora pero la DLL no envia el tipo de dato que espero .....

Ahora si que no se pq, supongo que sera por el uso de String, pero me pierdo....
versus
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de DLL en VB.net

Publicado por Nacho (56 intervenciones) el 08/04/2020 15:10:08
¿Cuándo es ahora?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso de DLL en VB.net

Publicado por Jairo (6 intervenciones) el 08/04/2020 15:43:02
1
Declare Function StringAdd Lib "miarchivo.dll" Alias "_StringAdd@20" (ByVal Resultado As String, ByVal Operand1 As String, ByVal Operand1Len As Integer, ByVal Operand2 As String, ByVal Operand2Len As Integer) As Short

Con esa función con integer y short ya no da error pero responde un valor erróneo en el Resultado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Uso de DLL en VB.net

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 09/04/2020 07:09:22
Pues pasa la .DLL a .Net también sino, ya verás las que te esperan y estás condenando tu trabajo a que se trunque, por ese pequeño gran detalle.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso de DLL en VB.net

Publicado por Jairo (6 intervenciones) el 11/04/2020 09:12:24
La DLL no es mia, sino ya estaria hecho, tendre que hacerme una mia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar