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 10-06-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Exclamation Enlazar Librería Dll .NET en Delphi

Buenos días a todos,
Tengo el siguiente problema. Estoy desarrollando un proyecto en el que tengo que integrarme con otra aplicación. Para ello tengo una librería dll de la otra aplicación con la que debería de realizar la integración. Yo programo en Delphi con el BDS2006. Según me han dicho la librería de la otra aplicación está desarrollada en .NET.

He referenciado la función de la dll de la siguiente forma:
Código Delphi [-]
function dllfunction(Par1: String; Par2: Double; Par3: Integer; Par4: TXSDateTime): String; stdcall; external 'dlllibrary.dll';

Y después la uso directamente:
Código Delphi [-]
...
dllfunction(myString,myDouble,myInteger,myTXSDateTime);
...

La aplicación compila pero cuando la inicio desde el BDS se me detiene al inicializar y si le doy a continuar da una excepción EAccessViolation.

¿Qué estoy haciendo mal?¿Qué puede estar ocurriendo?

Necesito ayuda, es urgente
__________________
"Patientia et constantia taelecum"
Responder Con Cita
  #2  
Antiguo 10-06-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Hola de nuevo,

He probado simplemente a cargar y liberar la librería y sí he podido, es decir:

Código Delphi [-]
var
  LibHandle : THandle;
begin
  LibHandle := LoadLibrary('dlllibrary.dll');
  Free(LibHandle);
end;

Esto sí funciona. Ahora lo que pretendo es encontrar la función que quiero usar con GetProcAddress pero no entiendo como se hace.

Espero vuestra ayuda. Muchas gracias.
__________________
"Patientia et constantia taelecum"
Responder Con Cita
  #3  
Antiguo 10-06-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Siguiendo con la investigación y con el tema he dado con lo siguiente que no es más que la carga de la librería dinámicamente
Código Delphi [-]
type
  TDLLFUNC = function(Par1: String; Par2: Double; Par3: Integer; Par4: TXSDateTime): String;
...
procedure PruebaCargaFuncion;
var
  LibHandle: THandle;
  DLLFunc: TDLLFunc;
  Resultado : String;
begin
  LibHandle := LoadLibrary('dlllibrary.dll');  
  try
    @DLLFunc := GetProcAddress(LibHandle,'DllFunction');
    if Assigned(DLLFunc) then
      Resultado := DLLFunc(MyString,MyDouble,MyInteger,MyTXSDateTime);
  finally
    Free(LibHandle);
  end;
end;

Ejecutando en el depurador me dice que 'Not enough actual parameters' cuando miro la variable DLLFunc y por supuesto nunca asigna la función. Ya no sé por donde seguir. Gracias.
__________________
"Patientia et constantia taelecum"
Responder Con Cita
  #4  
Antiguo 14-06-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por vejerf Ver Mensaje
Ejecutando en el depurador me dice que 'Not enough actual parameters' cuando miro la variable DLLFunc y por supuesto nunca asigna la función. Ya no sé por donde seguir.
Cuando dices "cuando miro la variable DLLFunc", ¿te refieres a la línea "if Assigned(DLLFunc) then"?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 15-06-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Sí Nuño a eso me refería.

Ejecutando el programa paso a paso voy viendo el valor que toman las variables locales como DLLFunc. En todo el proceso veo que DLLFunc no tiene ningún valor y en el depurador me sale ese mensaje de 'Not enough actual parameters'.

Saludos!
__________________
"Patientia et constantia taelecum"
Responder Con Cita
  #6  
Antiguo 15-06-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
No sé si será o no será, pero creo que está intentando llamar a la función y no comprobando el valor del puntero, y de ahí que diga que no tiene suficientes parámetros. Prueba con "if Assigned(@DLLFunc) then", a ver.

Personalmente no me gusta nada cómo maneja Delphi los punteros a función. Prefiero con mucho cómo lo hace Free Pascal, que es mucho más coherente (al estilo "C").
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
enlazar dos programas delphi cadina Varios 7 01-10-2008 17:11:47
enlazar dos programas delphi cadina OOP 2 08-08-2007 20:37:53
Enlazar MySql a Delphi osierra SQL 2 19-08-2004 11:08:16
enlazar una bd a delphi jas010 Conexión con bases de datos 4 15-08-2004 08:24:00
Enlazar Delphi cln BD Oracle 9¡ DANFIR Conexión con bases de datos 1 26-01-2004 17:38:40


La franja horaria es GMT +2. Ahora son las 19:14:28.


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