• Domingo 5 de Mayo de 2024, 07:24

Autor Tema:  Comunicación de VB.net con DLL en C++  (Leído 1466 veces)

area51-x

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Comunicación de VB.net con DLL en C++
« en: Miércoles 27 de Agosto de 2008, 12:01 »
0
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
  1. extern "C" DLLEXPORT result* __stdcall Charge (float ItemToItemDistance,float  ItemToSheetDistance,int &kolrezults,int quality,int maxtime,int( __stdcall  *callback)(int));
  2.  
  3.  
donde la estructura result es:

Código: Text
  1. struct result {int item_ident; float x,y,rotation_angle;};
  2.  

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
  1. 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()
  2.  

donde:

Código: Text
  1. Delegate Function callbackSafe(ByVal param As Integer) As Integer
  2.  
  3.     Structure result
  4.         Dim item_ident As Integer
  5.         Dim x, y, rotation_angle As Single
  6.     End Structure
  7.  

Y hago la llamada de la siguiente manera:

Código: Text
  1. Dim aux As result()
  2. 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)
  3.  



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