• Viernes 8 de Noviembre de 2024, 09:57

Autor Tema:  Interaccion VB con dll de C++  (Leído 2302 veces)

rorrofeo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Interaccion VB con dll de C++
« en: Miércoles 1 de Octubre de 2008, 20:55 »
0
A ver si alguien me puede ayudar con esto, que ya me tiene tiritón.

Estoy haciendo una dll en C++ que requiere que se le pasen dos argumentos: un número entero y una tabla de letras (las letras las trabajo como matriz de BYTE en VB y como matriz de CHAR en C++). Los parámetros los puedo enviar sin complicaciones hacia la dll: un entero y una referencia a la primera celda de la tabla.

Mi problema es que mi dll debe devolver un entero, un número con dos decimales y otra matriz similar a la recibida, pero con otras dimensiones (variables).

¿Cómo puedo recibir en VB los tres valores de retorno?

Me han dicho que devuelva un STRUCT de C++ que coincida con un TYPE de VB, pero mi problema es que no puedo saber las dimensiones de la matriz de retorno, entonces no sabría qué tipo de datos darle a las variables del STRUCT.

Tal vez podría, igual que en la llamada a la dll devolver la dirección del primer elemento de la matriz, pero ¿puede VB identificar direcciones de memoria como C?

Muchas gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Interaccion VB con dll de C++
« Respuesta #1 en: Jueves 2 de Octubre de 2008, 09:53 »
0
Las matrices de carácteres (o lo que es lo mismo, String en VB) deben ser declaradas como BSTR en C++. Te dejo un link (en inglés):

http://www.flipcode.com/archives/Interf ... nd_C.shtml

Mira la parte de "Advanced Data Types", ahí tienes código y lo explica muy bien. Y si no sabes inglés, siempre puedes hacer que Google traduzca la página, pero cuidado con algunas frases...

rorrofeo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Interaccion VB con dll de C++
« Respuesta #2 en: Jueves 2 de Octubre de 2008, 21:54 »
0
Muchas gracias. Voy a leer.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Interaccion VB con dll de C++
« Respuesta #3 en: Sábado 4 de Octubre de 2008, 01:07 »
0
Cita de: "rorrofeo"
A ver si alguien me puede ayudar con esto, que ya me tiene tiritón.

Estoy haciendo una dll en C++ que requiere que se le pasen dos argumentos: un número entero y una tabla de letras (las letras las trabajo como matriz de BYTE en VB y como matriz de CHAR en C++). Los parámetros los puedo enviar sin complicaciones hacia la dll: un entero y una referencia a la primera celda de la tabla.

Mi problema es que mi dll debe devolver un entero, un número con dos decimales y otra matriz similar a la recibida, pero con otras dimensiones (variables).
¿Cómo puedo recibir en VB los tres valores de retorno?
Me han dicho que devuelva un STRUCT de C++ que coincida con un TYPE de VB, pero mi problema es que no puedo saber las dimensiones de la matriz de retorno, entonces no sabría qué tipo de datos darle a las variables del STRUCT.

Tal vez podría, igual que en la llamada a la dll devolver la dirección del primer elemento de la matriz, pero ¿puede VB identificar direcciones de memoria como C?

Muchas gracias.

Para recibir los datos desde VB cuando declares las funciones debes declarar los parámetros con ByRef para poder recibirlos, de otro modo sólo los envía y no espera recibir nada salvo a la parte derecha de la función (si es una sub ni eso).
el entero devuélvelo con la llamada de la función el datos con 2 decimales trátalo como single en vb y la matriz si es unidimensional (no importa los elementos que tenga) como matriz de bytes, tal como señalas...

Cita de: "rorrofeo"
Tal vez podría, igual que en la llamada a la dll devolver la dirección del primer elemento de la matriz, pero ¿puede VB identificar direcciones de memoria como C?.
Eso es precisamente lo que hace ByRef pasar una dirección al comienzo de los valores y no el valor directamente.
«Ma non troppo»
----> ModoVacaciones = False<----

rorrofeo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Interaccion VB con dll de C++
« Respuesta #4 en: Viernes 10 de Octubre de 2008, 16:08 »
0
OK m0skit0 y Nebire. La verdad parece ser que esto los parámetros ByRef es bien básico y fundamental en C, pero uno que es novato se pierde con lo de los punteros y con lo de modificar los valores de las variables directamente en la memoria. Me quedó clarísimo. (Estoy haciendo un generador de crucigramas integrado en una suite para profesores, que en VB, que tarda mucho porque hay demasiadas iteraciones con matrices grandes).

Mil Gracias