Problemas con dll

13/11/2003 - 16:24 por Guillermo Sierra | Informe spam
Buenos días,

Alguno de ustedes sabe como definir un string, de modo que sea compactible
con VB o otro tipo de lenguaje, es decir, quiero hacer una dll en c++ de
modo que otras aplicaciones la puedan llamar, al definir que el tipo de
datos que retorno o recibo es un char *, la aplicacion que la llama saca
error, no se como definir el dato, de mod que sea compactibel con otro
lenguaje. Elemplo

Si en VB lo defino como string como debo definirlo en C++ para que se puedan
comunicar.


Muchas gracias,


Gillermo Sierra

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral González
13/11/2003 - 21:13 | Informe spam
En C++ debes declara la función como WINAPI y extern "C", admás debes crear
un archivo .def con la definicion de los nombres de las funciones exportadas
para evitar que se decoren los nombres de las funciones.

extern "C"
{
void WINAPI TuFuncion(char* lpString);
}

En en declare de Visual Basic debes hacer algo como:

Public Declare Function TuFuncion Lib "TuLibreria" (ByVal lpString As
String) As Long

Un saludo
Rodrigo Corral González
Respuesta Responder a este mensaje
#2 Guillermo Sierra
14/11/2003 - 13:59 | Informe spam
Ya encontre el problema, resulta que lo que estoy haciendo en encriptando
datos, la funcion me recibe los parametros y hace el proceso muy bien, pero
a la hora de retornar la informacion encriptada, me genera un error; como
hago para devolver un string con los datos encriptados.

Por ejemplo, en la variable sEncript, tengo el dato encriptado como hago
para devolver la informacion y que sea coimpactible con VB, ensaye lo
siguiente pero no me funciono, si alguien tiene una idea, será bienvenida.

unsigned char* __declspec(dllexport) CALLBACK Encriptar(char *psMensaje,
char *psClave)

{
char sEncriptada[1024];
char *sResultado;
char sMensaje[1024];
int iFaltante=0;

strcpy(sMensaje, psMensaje);
iFaltante=strlen(sMensaje)%8;
if(iFaltante!=0)for(;iFaltante<8;iFaltante++)strcat(sMensaje," ");
CBlowFish oBlowFish((unsigned char*)psClave, strlen(psClave));
oBlowFish.ResetChain();
oBlowFish.Encrypt((unsigned char*)sMensaje, (unsigned
char*)sEncriptada, strlen(sMensaje),
BlowFish::CFB);
return (unsigned char*)sEncriptada;
}

El problema esta en el tipo de retorno como lo puedo solucionar.

Gracias,

Guillermo Sierra


"Rodrigo Corral González" wrote in message
news:#
En C++ debes declara la función como WINAPI y extern "C", admás debes


crear
un archivo .def con la definicion de los nombres de las funciones


exportadas
para evitar que se decoren los nombres de las funciones.

extern "C"
{
void WINAPI TuFuncion(char* lpString);
}

En en declare de Visual Basic debes hacer algo como:

Public Declare Function TuFuncion Lib "TuLibreria" (ByVal lpString As
String) As Long

Un saludo
Rodrigo Corral González


Respuesta Responder a este mensaje
#3 Rodrigo Corral González
14/11/2003 - 18:01 | Informe spam
El problema es que estas devolviendo un puntero a memoria que cuando la
función termina se ha liberado, por lo que puedes tener resultados
impredecibles. Deberias pasar desde fuera de la función un buffer donde la
función deje los datos encriptados. Este buffer lo puedes declara como una
cadena con tamaño fijo en visual basic y pasarselo a función como un ByRef
String.

Un saludo
Rodriog Corral González
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida