Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2003
ogorut ogorut is offline
Miembro
 
Registrado: may 2003
Posts: 21
Poder: 0
ogorut Va por buen camino
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...
Responder Con Cita
  #2  
Antiguo 22-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
¿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.
Responder Con Cita
  #3  
Antiguo 22-10-2003
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
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...
Responder Con Cita
  #4  
Antiguo 22-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 23-10-2003
ogorut ogorut is offline
Miembro
 
Registrado: may 2003
Posts: 21
Poder: 0
ogorut Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 23-10-2003
ogorut ogorut is offline
Miembro
 
Registrado: may 2003
Posts: 21
Poder: 0
ogorut Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


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


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
Copyright 1996-2007 Club Delphi