Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con DLL (https://www.clubdelphi.com/foros/showthread.php?t=4622)

ogorut 22-10-2003 12:21:12

Problema con DLL
 
Estoy intentando crear una DLL y me da un error que no siempre me pasa.
El caso es que yo he creado mi DLL con una serie de funciones declaradas con la estructura:

{
function nombre_funcion(parametros):tipo_resultado; stdcall;

implementation

function nombre_funcion(parametros):tipo_resultado; stdcall;
begin
...
operaciones
...
result := resultado;
end;
}

mas o menos.

En el programa creo un tipo (type) que hacen referencia a las funciones de la DLL:

type
Tnombre_funcion = function(parametros):tipo_resultado; stdcall;
private
nombre_funcion = Tnombre_funcion;
public
end;

var HandleDLL : THandle;

Bien pues ahora al ejecutar el programa vinculo mi variable "nombre_funcion" a la funcion de la DLL:

HandleDLL:=LoadLibrary(PChar('ruta'+'\DllKeyGenerator.dll'));
{ Punteros a la direccion de la DLL }
@nombre_funcion:=GetProcAddres(HandleDLL, 'nombre_funcion');

Pues ahora solo falta hacer la llamada a la DLL.
Una de las funciones me devuelve un String y en realidad me devuelve el resultado correcto pero junto con un error :

"INVALID POINTER OPERATION"

Alguien sabe porque puede sucederme???

Tengo que añadir que a veces no da el error y que si intento llamar muchas veces seguidas a la funcion, me da un error que me cierra la aplicacion.

Espero que no sea una charla muy larga...

delphi.com.ar 22-10-2003 16:27:52

¿Porqué no nos muestas la vedadera declaración de las funciones?


Saludos!

hermes_32 22-10-2003 18:09:31

Bueno, supongo que tienes razon que deberia haber mostrado la declaracion de las funciones pero he detectado cual puede ser el problema.

Me funcionan todas las funciones meno una.

La que me falla devuelve un String. He leido en algunos libros que puede haber problemas en las DLL que tienen funciones que devuelven tipos de dato String y recomiendan que usemos Pchar en vez de String. Tengo que probarlo a ver si funciona asi y ya os comento.

Pero de todas formas acepto sugerencias...

delphi.com.ar 22-10-2003 18:24:34

:D Parece cómico, pero en este hilo que tiene el mismo título que este, he hecho una recomendación muy sumilar a la que tu has leído en algunos libros:

http://www.clubdelphi.com/foros/show...&threadid=3645

Saludos!

ogorut 23-10-2003 10:04:19

Esto me supera. He cambiado todo de String a Pchar y me sigue sin funcionar. Para colmo pense que en vez de devolverme un String mi funcion me devolviera un Double. Pero es asombroso el caso. La funcion me devuelve un valor diferente si la uso desde la dll que si la llamo localmente a mi programa.
Que tipo de Dato tengo que devolver? No funciona con Double??
Que tipos de datos pueden devolver las funciones llamadas a una DLL??
Gracias

ogorut 23-10-2003 10:23:45

Bueno chicos. Gracias por todo. Ya he resuelto mi problema. Al final lo he conseguido devolviendo un Double. No me funcionaba porque en la declaracion de la funcion en la zona Type en mi modulo principal la funcion no tenia la misma estructura que en la DLL.
Menuda cagada!!
Siento haber compartido mi torpeza con vosotros...espero no no volver a hacerlo.


La franja horaria es GMT +2. Ahora son las 12:12:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi