[C con Clase] problemas para enviar string desde una dll-c++

Alejandro Ramirez nostromo.cl en gmail.com
Lun Jun 13 19:23:29 CEST 2011


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:

#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 reason, LPVOID reserved)
{
    return TRUE;
}
//---------------------------------------
/* funciones a emplear */
extern "C"
{
    DLLEXPORT _stdcall int suma(int a,int b)
    {
        return (a+b);
    }
    //------------------------------------------
    DLLEXPORT _stdcall char* cadena(char* s)
    {
        char *s2="programado en C++";
        strcat(s,s2);
        return s;
    }
}

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

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:


Private Declare Function suma Lib "C:\...\libreria.dll" (ByVal a As Integer,
ByVal 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:

Private Sub cmdCadena_Click()
    Static s As String
    s = "[B]DLL[/B] "
    MsgBox cadena(s)
End Sub

En el cuadro de dialogo 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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110613/b0a83da5/attachment.html>


Más información sobre la lista de distribución Cconclase