Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Pasar string desde DLL a visual basic

Estas en el tema de Pasar string desde DLL a visual basic en el foro de C/C++ en Foros del Web. Holas; Tengo un proyecto en visual basic 6.0, el cual estara con dll, unas con ActiveX para controlar los eventos con option, commandbutton, listbox, etc. ...
  #1 (permalink)  
Antiguo 13/06/2011, 07:37
 
Fecha de Ingreso: agosto-2009
Mensajes: 23
Antigüedad: 14 años, 8 meses
Puntos: 2
Pregunta Pasar string desde DLL a visual basic

Holas;

Tengo un proyecto en visual basic 6.0, el cual estara con dll, unas con ActiveX para controlar los eventos con option, commandbutton, listbox, etc.

Y otras con dll-c++ en Dev-C++. Tengo en la dll funciones para operaciones matemáticas y funcionan sin problemas desde VB.

El problema lo tengo al recibir datos de tipo string, al enviar por el formulario un string, este se muestra, pero no, el string asociado desde la dll y unido con srtcat, el código es el siguiente:

Código PHP:
#include <windows.h> 
#include <cstdio> 
#include <cstdlib> 
#include <conio.h> 
#include <cstring> 
//-------------------------------------------------------- 
#if BUILDING_DLL 
# define DLLEXPORT __declspec (dllexport) 
#else /* Not BUILDING_DLL */ 
# define DLLEXPORT __declspec (dllimport) 
#endif /* Not BUILDING_DLL */ 
//-------------------------------------------------------- 
BOOL APIENTRY DllMain (HINSTANCE hInst,DWORD reasonLPVOID reserved

    return 
TRUE

//--------------------------------------- 
/* funciones a emplear */ 
extern "C" 

    
DLLEXPORT _stdcall int suma(int a,int b
    { 
        return (
a+b); 
    } 
    
//------------------------------------------ 
    
DLLEXPORT _stdcall charcadena(chars
    { 
        
char *s2="programado en C++"
        
strcat(s,s2); 
        return 
s
    } 

La unión de cadena esta dada en la biblioteca string.h:

Código PHP:
char *strcat(char*s1, const char *s2); 
"Añade una copia de la cadena apuntada por s2 (incluyendo el carácter nulo) al final de la cadena apuntada por s1. El carácter inicial de s2 sobrescribe el carácter nulo al final de s1."

La llamada desde visual basic es el siguiente:

Código PHP:
Private Declare Function suma Lib "C:\...\libreria.dll" (ByVal a As IntegerByVal b As Integer) As Integer
Private Declare Function cadena Lib "C:\...\libreria.dll" (ByVal s As String) As String 
La llamada en el evento commandbutton es:

Código PHP:
Private Sub cmdCadena_Click() 
    Static 
As String 
    s 
"[B]DLL[/B] " 
    
MsgBox cadena(s
End Sub 
En el MessageBox solo se muestra "DLL" y el string que debe aparecer a continuación "programado en C++", no se muestra.

La salida debiera de ser así:

"DLL programado en C++"

Pero, solamente aparece el string que envio desde visual basic:

"DLL"

No se que estaré haciendo mal o muy mal, como datos adicionales tengo win7. Agradeceria cualquier ayuda.

Gracias.....

Nos vemos
  #2 (permalink)  
Antiguo 13/06/2011, 18:39
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Pasar string desde DLL a visual basic

No se exactamente pero creo que enviar un String de Visual basic a una dll hecha en c++ no quiere decir que este sea representado como un puntero a char... HAbria que buscar informacion sobre como pasar una string a una dll en c++.
Mas tarde cuando tenga tiempo lo busco.
  #3 (permalink)  
Antiguo 16/06/2011, 05:31
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Pasar string desde DLL a visual basic

No conozco Visual Basic, pero sí recuerdo de antaño alguna aplicación que tuve que desarrollar con código en C y en FORTRAN que, para pasar cadenas de caracteres como parámetros a funciones, en FORTRAN se pasaba automáticamente un parámetro oculto correspondiente a la longitud de la cadena, es decir, en FORTRAN no necesitabas poner el parámetro para la longitud de la cadena en la lista de parámetros de la función, pero sí había que tener en cuenta este detalle al llamar a funciones escritas en C, en las que sí debe aparecer este parámetro en la lista de parámetros. Esto me lo encontré tanto en equipos UNIX como en los compiladores Microsoft FORTRAN y Microsoft C para MS-DOS, y muy bien podría ocurrir algo similar con Visual BASIC. También recuerdo que para utilizar BASIC (compilado) junto con otros lenguajes, era necesario que el programa principal estuviera escrito en BASIC (aunque parece que eso ya lo estás haciendo así).

Espero que te sirva de ayuda. Saludos,
  #4 (permalink)  
Antiguo 17/06/2011, 14:21
 
Fecha de Ingreso: agosto-2009
Mensajes: 23
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Pasar string desde DLL a visual basic

Holas;

Les agradesco a los dos por responder.

No respondí hasta ahora, por la razón de que me encontraba inmerso en este problema, he notado lo siguiente:

Cuando corro el vb (sin crear el exe), sale algo bastante curioso, la primera cadena que envio "DLL ", efectivamente sale, cuando le agrego la segunda desde la libreria y la concateno con strcat, sale la primera letra de "programando con c++", es decir, solo aparece la "p", el resto del string, sale el nombre de la aplicación o nombre del proyecto!!!!!!!!!!!!!.

Ahora continuando con el drama, cuando envio solamente, string sin mandar nada desde VB, este se cuelga y se cae, tanto el VB6 como el exe que genere posteriormente.

Como guinda del postre, solamente cuando utilizo la siguiente función de API:

SetwindowText o wsprintf, strcat, etc, y coloco un control de texto por ejemplo:

txtValores.hwnd

Ceroooo, drama en el sentido que la función de la DLLC++ solo envia.

Desgraciadamente, tengo que enviar los resultados a un Label, peor no tuiene esta propiedad para identificar esta ventana creada en VB, ".hWnd" .

Estoy trabajando para dar una solución y para que vean que no he estado flojeando esperando a que me hagan la pega.

Saludos y esperando una guia....

Etiquetas: basic, dll, pasar, string, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:39.