PDA

Ver la Versión Completa : Uso de DLL


joumont
08-10-2004, 15:52:41
Tengo un "pequeño problema" usando DLL escritas en Delphi. Uso Delphi 6. El caso es que al internar usar funciones de la DLL, siempre que el valor que devuelve la funciópn es un String, no funciona, me da un error "Invalid Pointer Operation". He probado casi todo. He leido algo acerca de una libreria "FastShareMemory" que hay que usar pero no tengo ni idea. Necesitaria ayuda urgente, no se que hacer para sacar partido a las DLL.

delphi.com.ar
08-10-2004, 18:31:11
Los tipos string no son vàlidos dentro de las convenciones de llamadas de las DLLs... Te recomiendo utilizar tipos PChar que son punteros a caracter terminados en nulo, para porder pasar cadenas de caracteres.

Saludos!

joumont
08-10-2004, 20:39:02
Necesitaria un ejemplo simple de una dll con una funcion que recibe un string y devuelva un pchar.

Muchas gracias por adelantado.

vic_ia
09-10-2004, 03:16:47
hola...

segun entiendo, no es "recomendable" el uso de Strings, ni en el paso de parametros ni en el valor de retorno de una función que se encuentre en una DLL, como te lo han comentado, lo que debes hacer es utilizar, tanto en los parametros de llamada de la función como en el valor de retorno el tipo PChar

aunque borland te permite el uso de Strings en parametros y en valores de retorno estos solo son efectivos (me parece) cuando las llamas desde programas realizados en Delphi y ademas debes "distribuir" adicionalmente una de las librerias de borland (de momento no recuerdo el nombre) que es la que lleva a cabo todo el "trabajo" relacionado con Strings...

saludos....

joumont
10-10-2004, 22:12:18
Creo que la libreria a la que haces referencia es la "shareMem", pero tampoco se como usarla.

vic_ia
11-10-2004, 18:10:39
hola joumont...

cuando habres un nuevo proyecto de DLL en forma de comentario te aparecen las indicaciones que debes de seguir si deseas utilizar Strings en tus DLL (y en los proyectos que la utilicen)....

saludos...

joumont
15-10-2004, 10:46:47
La solución la encontre pasando PChar a traves de un StringList, asignandole la memoria necesaria, antes de retornar el valor, me funciona bien. Unicamente que al retornar la cadena el final de la misma es algo así como $D$A, pero se puede quitar con el comando de cadenas delete