FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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... |
#2
|
||||
|
||||
¿Porqué no nos muestas la vedadera declaración de las funciones?
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
||||
|
||||
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... |
#4
|
||||
|
||||
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!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
|||
|
|||
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 |
#6
|
|||
|
|||
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. |
|
|
|