Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-05-2008
dfarias dfarias is offline
Miembro
 
Registrado: abr 2007
Posts: 79
Poder: 18
dfarias Va por buen camino
Incorporar dll al proyecto

Quisiera saber como hago para incorporar o referenciar a un archivo .DLL dentro de mi proyecto. Es una biblioteca externa que no pertenece al delphi 7. Si quiero ejectar la aplicacion en otros ordenardes debo agregar al .dll o ya al compilar queda todo incluido. Muchas gracias.
Responder Con Cita
  #2  
Antiguo 15-05-2008
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Hay dos formas de llamar o usar rutinas que estan contenidas en una dll, y usar estas en tu proyecto delphi.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TfrmMain = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

//Forma 1 Carga estatica-----------------------------
Function Suma(a,b:Single):single; External 'Suma.Dll';

var
  frmMain: TfrmMain;

implementation

{$R *.DFM}

//Forma 1
procedure TfrmMain.BitBtn1Click(Sender: TObject);
Var
   a,b,c:Single;
begin
     //Ejecucion de la funcion_Procedimiento...
     a:=10.0; b:=2.0;c:=0;
     c:=Suma(a,b);
end;

//Forma2 carga dinamica-------------------------
procedure TfrmMain.BitBtn2Click(Sender: TObject);
type
  TSuma = Function(a,b:Single); stdcall;
var
  DLLHandle: THandle;
  Suma: TSuma;
  a,b,c:Single;
begin
  //Carga la libreria 'SUMA.DLL'
  DLLHandle := LoadLibrary('SUMA.DLL');
  try
    if DLLHandle <= 0 then
      ShowMessage('Error Dll no encontrada...');

    //Obtiene la direccion de la funcion 'Suma';
    @Suma := GetProcAddress(DLLHandle, 'Suma');

    if Assigned(Suma) then
    begin
           a:=10.0; b:=2.0;c:=0;
           c:=Suma(a,b);
    end
    else
      ShowMessage('Procedimiento/Funcion no encontrado');

  finally
    Application.ProcessMessages;
    FreeLibrary(DLLHandle);
  end;   
end;

end.

La Dll debe estar junto con tu ejecutable o en una ruta que pueda ser ubicada como por ejemplo x:\windows\system32

Saludos
Responder Con Cita
  #3  
Antiguo 12-11-2008
dfarias dfarias is offline
Miembro
 
Registrado: abr 2007
Posts: 79
Poder: 18
dfarias Va por buen camino
Estoy probando con el uso del DLL externas y no logro hacer que me devuelvan datos las funciones.

Por ejemplo este unit en la funcion VerVersion si que me devuelve el valor numerico pero no me asigna nada a la variable cadena, la cual se cargaria con los datos de la version i.e.(Rel.4.13) . Creo que el paso por puntero es correcto.


unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
AbrirPuerto: TButton;
VerVersion: TButton;
procedure AbrirPuertoClick(Sender: TObject);
procedure VerVersionClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }

cadena:string;

function OpenSerial(PortNumber:LongWord): LongWord;
function CloseSerial:longword;


end;

var
Form1: TForm1;

implementation

function Dll_OpenSerial(PortNumber:LongWord): integer; external 'I:\PRUEBA\DLL_ACCESS_POINT.dll';

function Dll_CloseSerial(PortNumber:longword): longword; external 'I:\PRUEBA\DLL_ACCESS_POINT.dll'

function Dll_GetDllVersion(var cadena): longword; external 'I:\PRUEBA\DLL_ACCESS_POINT.dll'

function Dll_ReqSysInfo(var sInfo:string):longWord; external 'I:\PRUEBA\DLL_ACCESS_POINT.dll'

{$R *.dfm}

procedure TForm1.AbrirPuertoClick(Sender: TObject);

begin

OpenSerial(0);
OpenSerial(1);
OpenSerial(2);
OpenSerial(3);
OpenSerial(4);
OpenSerial(5);

end;


procedure TForm1.VerVersionClick(Sender: TObject);
var
resultado:longWord;

begin
cadena:= '1234567890';
resultado:= Dll_GetDllVersion( cadena);
MensaPanta(resultado);
MensaPanta(cadena);
end;



function TForm1.OpenSerial(PortNumber: LongWord): LongWord;

begin
result:= Dll_OpenSerial(PortNumber);
if result = 1 then
MensaPanta('Abrio')
else
MensaPanta('Error');
end;

end.


Muchas gracias por vuestra ayuda.
Responder Con Cita
  #4  
Antiguo 12-11-2008
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por dfarias Ver Mensaje
function Dll_GetDllVersion(var cadena): longword; external 'I:\PRUEBA\DLL_ACCESS_POINT.dll'
Creo que le falta el tipo a cadena: String o PChar.

Código Delphi [-]
   function  Dll_GetDllVersion(var cadena:[String/PChar]): longword; external 'I:\PRUEBA

Segundo si el tipo es PChar, te recomiendo hacer

Código Delphi [-]
procedure TForm1.VerVersionClick(Sender: TObject);
var
   resultado:longWord;
   aPChar   : PChar;
begin
      cadena:= '1234567890';
      
      aPChar := StrAlloc(Length(Cadena)+1);
      StrPCopy(aPChar,Cadena);


   resultado:= Dll_GetDllVersion(  aPChar);

   Cadena:=StrPas(aPChar);

   MensaPanta(resultado);
   MensaPanta(cadena);
end;

Saludos y espero te sirva.
Un abrazo
Desde Concepcion-Chile
Responder Con Cita
  #5  
Antiguo 12-11-2008
dfarias dfarias is offline
Miembro
 
Registrado: abr 2007
Posts: 79
Poder: 18
dfarias Va por buen camino
Gracias cloayza por tu respuesta , pero sigo con el mismo problema.

La funcion me devuelve un 8 pero la cadena queda tal cual se la paso y deberia quedar "4.13 VFP".

Es como si no tomara la referencia de la variable,sino su valor.

Usando la misma .dll desde VB6 . funciona perfecto, me devuelve lo que corresponde.

No se por donde mirarlo ya, estoy danto palos de ciego.




Este es la documentacion del la DLL

Función Dll_GetDLLVersion (ByRef SerialStr As String) As Long .
Esta función devuelve la versión de la Dll.

Parámetros
[out] SerialStr
En esta posición se guarda la versión de la DLL.

Valor que devuelve
Devuelve el número de caracteres almacenados en SerialStr.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Incorporar DDL a EXE carmax Varios 1 10-02-2007 18:21:07
incorporar imagenes a un RichEdit1 jorodgar Varios 3 29-04-2005 20:16:54
problemas al incorporar en red un equipo con windows xp Aprendiendo Varios 0 28-03-2005 14:19:51
Ejecutar proyecto. bububin Varios 2 01-06-2004 08:54:47
Proyecto MDI? danytorres Varios 2 29-10-2003 15:52:25


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


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