CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 Comunicación de VB.net con DLL en C++

(1/1)

area51-x:
Hola, soy nuevo en estos foros y como no, tenia que empezar con una duda que me tiene bastante jodidillo.

Bien paso a contarlo, tengo una libreria escrita en C++ que tiene la sigiente funcion:


--- Código: Text ---extern "C" DLLEXPORT result* __stdcall Charge (float ItemToItemDistance,float  ItemToSheetDistance,int &kolrezults,int quality,int maxtime,int( __stdcall  *callback)(int));  donde la estructura result es:


--- Código: Text ---struct result {int item_ident; float x,y,rotation_angle;}; 
Mi problema viene cuando intento llamar esta funcion en VB.net(VS2005), ya que no se como tendria que declarar y/o pasar los parametros de kolrezults, callback y el valor de retorno.

Actualmente, lo tengo declarado de esta manera:


--- Código: Text ---Private Declare Function Charge Lib "Proyecto1.dll" Alias "Charge" (ByVal ItemToItemDistance As Double, ByVal ItemToSheetDistance As Double, ByRef kolrezults As Integer, ByVal quality As Integer, ByVal maxtime As Integer, ByRef callback As callbackSafe) As result() 
donde:


--- Código: Text ---Delegate Function callbackSafe(ByVal param As Integer) As Integer     Structure result        Dim item_ident As Integer        Dim x, y, rotation_angle As Single    End Structure 
Y hago la llamada de la siguiente manera:


--- Código: Text ---Dim aux As result()aux = Charge(m_i2id * Single.Parse(m_scale_factor.ToString), m_i2sd * Single.Parse(m_scale_factor.ToString), m_numresults, m_quality, m_timeout, m_callback) 


Pero al ejecutarlo me da el siguiente error:

Se produjo una excepción de tipo 'System.Runtime.InteropServices.MarshalDirectiveException' en NestingPrueva.rhp pero no se controló en el código del usuario

Información adicional: No se puede calcular la referencia de 'return value': Combinación de los tipos administrado y no administrado no válida.


A ver si alguno me puede echar una mano ;)
Gracias por adelantado

Navegación

[0] Índice de Mensajes

Ir a la versión completa