La Web del Programador: Comunidad de Programadores
 
    Pregunta:  247 - CREAR UNA DLL EN VC++ PARA VB 4.0
Autor:  Gabriel
Necesito ayuda Urgente: Estoy creando una DLL en Visual C++ 1.5 para ser utilizada desde Visual Basic 4.0(Estoy trabajando en 16 bits con Windows 95). Una de las funciones que he creado recibe una cadena y devuelve otra cadena, la declaracion del parámetro es la siguiente:
NPSTR CALLBACK __export AVISO ( NPSTR cadena)
{
....
}
Tambien he probada con LPSTR y char *

En Visual Basic hago la declaración utilizando como parámetro ByVal cadena As String sin embargo la función de VC++ no recibe ninguna cadena y cuando ejecuto el programa VB me da un error diciendo que los tipos no coinciden.
¿Cual es la declaración declaración correcta para poder recibir un String de Visual Basic y devolver otro?
Cuando paso y devuelvo enteros no hay ningún problema.
También quisiera saber cual seria la forma de pasar un array.
Desde ya muchas gracias


  Respuesta:  Isaac Valentin
Hola Gabriel:

Tengo exáctamente el mismo problema que tú. Yo he conseguido resolverlo de una forma 'poco elegante'

Mi función en C++ es del estilo
int Venta (char* entrada, char* salida);

y en VisualBasic declaro la función Venta así:
Private Declare Function Venta Lib "SmpaItf.dll" (ByVal importe As String, ByVal buffer As String) As Integer

en VB creo un string, que es donde en realidad voy a recibir los datos del VC

dim buffer as string
dim status as integer

buffer = Space(1024)
status = Venta("12.00", buffer)
msgbox buffer

La función en C lo que hace es "rellenar" el parámetro char* salida y, en visual basic, después de la llamada a la función Venta, la variable buffer contiene lo que la función en C ha puesto.

No me gusta, aunque funciona, creo que es una forma 'guarra' de hacerlo y además nos obliga a definir el tamaño de la respuesta desde el Visual Basic ..... pero es la única forma en que he podido implementarlo ... si al final tu has conseguido una forma mejor ... por favor cuentamela.

Thanks

  Respuesta:  Miguel Sepulveda
Prueba a usar en VB ByRef y en C++ usa char *.
Espero que te sirva para solucionar tu problema. Un saludo.