Ver Mensaje Individual
  #8  
Antiguo 19-04-2019
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Reputación: 19
CrazySoft Va por buen camino
Prueba de esta manera



con Rio 10.2

Código Delphi [-]


library MyLibrary;


uses
//  System.SimpleShareMem,  //no requiere
  System.SysUtils,
  System.Classes;

{$R *.res}
function Test1(): PAnsiChar; stdcall;
begin
  Result:= PAnsiChar('Prueba de Función en DLL 1');
end;


exports
  Test1,
  Test2
  ;

begin
end.


con D7

Código Delphi [-]


unit Unit1;

interface

uses
//  ShareMem,  // no requiere, si se añade da error al cerrar la aplicacion
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

     // PARA USO DE DLL EN BTN2
TTest1 = function() : PAnsiChar; stdcall;



var
  Form1: TForm1;



implementation
// PARA USO DE DLL EN BTN1
function Test1() : PAnsiChar; stdcall; external 'MyLibrary.dll';



{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  sResult : AnsiString;
begin
  sResult:=trim( Test1);
//  memo1.Lines.Clear;
  memo1.Lines.Add(sResult);
end;


procedure TForm1.Button2Click(Sender: TObject);

var
  sResult: AnsiString;
  Handle: THandle;
  TestStr: TTest2;
begin
  Handle := LoadLibrary('MyLibrary.dll');
  if Handle <> 0 then
    @TestStr:= GetProcAddress(Handle, 'Test1');
    if @TestStr <> nil then
    begin
      sResult := TestStr;
//      memo1.Lines.Clear;
      memo1.Lines.Add(sResult);
    end;
    FreeLibrary(Handle);

end;
Responder Con Cita