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:
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:
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:
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:
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:
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