Acá esta la solución definitiva para LAZARUS.
Hay algunos ejemplos para Delphi pero no me corren bien en Lazarus. Les dejo el código de la librería y también del formulario con dos botones.
Espero les sea de ayuda.
Código de la DLL:
##############################################################
library MiLibreria;
{$mode objfpc}{$H+}
uses
Dialogs ,Interfaces //para uso de los ShowMessage
,sysutils, Forms
function MiFuncion(x: double; y: PChar): PChar; stdcall;
var
s :ansistring;
//s: string; //puede ser asi tambien
begin
s := 'Hello ' + FloatToStr(x) + ' ' + y + '!';
result := PChar(s);
end;
procedure Mensajito; stdcall;
begin
ShowMessage('Hola mundo!');
end;
exports
MiFuncion, Mensajito;
begin
Application.Initialize;
end.
##############################################################
Código del Form con dos botones:
##############################################################
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
procedure Mensajito; external 'MiLibreria.dll';
function MiFuncion(x: double; y: PChar): PChar; external 'MiLibreria.dll';
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Mifuncion(23.54, 'Jorge'));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Mensajito;
end;
end.
##############################################################
Saludos.