C/Visual C - Pasar cadenas por referencia en una dll

 
Vista:

Pasar cadenas por referencia en una dll

Publicado por rraces (25 intervenciones) el 04/04/2006 13:02:34
Hola amigos, estoy intentando pasar una cadena por referencia a una dll, para que esta la modifique. Pero no me funciona. Este es el codigo de la dll:

/ pruebadll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include <string.h>

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

extern "C" __declspec(dllexport) int Somma(int a, int b)
{

return a+b;
}

extern "C" __declspec(dllexport) int Test(char * a)
{

strcpy(a,"DESPUES");
return 1;
}

Y el código del ejecutable que llama a la dll es:

#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
#include "string"

using namespace std;

void main(void)
{

typedef UINT (CALLBACK* LPFNDLLFUNC1)(char *);

HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer

UINT uReturnVal;

char *cadena = " Antes de llmar a la dll";


hDLL = LoadLibrary("C:\\rraces\\pruebadll.dll");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"Test");
if (!lpfnDllFunc1)
{
// handle the error
printf("2\n");
FreeLibrary(hDLL);
}
else
{
// call the function
printf("2\n");


uReturnVal = lpfnDllFunc1(cadena);

printf("LA CADENA --> %s\n",cadena);
}
}

system("pause");
}

Decir que la funcion de la suma si me funciona, pero la de Test no. Al ejecutarlo da un mensaje de error.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pasar cadenas por referencia en una dll

Publicado por fernando.gomez (1603 intervenciones) el 04/04/2006 16:14:56
¿Y qué mensaje de error te está apareciendo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pasar cadenas por referencia en una dll

Publicado por rraces (25 intervenciones) el 06/04/2006 09:39:56
Me da un access violation cuando intenta acceder a la funcion de la dll.
Suponga que será algo de memoria.
He probado ha pasar un tipo string pero me lo modifica en la función pero cuando retorna al programa principal no se queda modificado.

Muchas Gracias por tu ayuda. Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pasar cadenas por referencia en una dll

Publicado por JoseGR (41 intervenciones) el 06/04/2006 17:19:01
Hola, creo que el problema es que desde la dll esta intentando modificar una cadena que apunta a un valor estatico, prueba con:

char cadena[256] = "Antes de llamar a la dll";

Jose
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar