код библиотеки:
- Код: Выделить всё
library asd;
{$mode objfpc}{$H+}
uses
Classes, dialogs,
SysUtils, ExtCtrls;
{ you can add units after this }
procedure valid(owner : tcomponent; var s : string);stdcall;
begin
showmessage('hello from library');
end;
exports
valid;
begin
end.
код вызываемой программы :
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources,
dynlibs, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
sproc = procedure (owner : Tcomponent; var s : string);
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
dllh : Tlibhandle;
valid2 : sproc;
implementation
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
dllh := loadlibrary('mylib/asd.so');
if dllh = 0 then showmessage('not loaded')
else
begin
showmessage('loaded');
pointer(valid2) := GetProcAddress(dllh, 'valid');
valid2(application, s);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
if dllh <> 0 then
begin
UnLoadLibrary(dllh);
showmessage('unloaded');
end;
end;
initialization
{$I unit1.lrs}
end.
все компилируется, но когда нажимаем button1
программа показывает, что библиотека загружена (срабатывает showmessage('loaded'); ).
но далее я получаю ошибку " Project raised exception class 'External: SIGSEGV' "
чего я уже попробывал:
копирование библиотеки в /lib и /usr/lib
убирал stdcall;
множество других мелких извращений, о которых и вспоминать не хочется
данный пример неплохо срабатывает в kylix и delphi (единственное там вместо pointer(valid2):=GetProcAddress(dllh,'valid') используется @valid2 := GetProcAddress(dllh,'valid') ).
Народ, спасите мои нервы, ибо четвертый день е**сь(РАди проверки в kylix даже нашел и поставил Altlinux compact!).
Хочется и дальше программировать в Лазаре, то этот тупик просто бесит ...
Если не трудно перепишите этот код, как он должен быть .
Mandriva 2007 free, lazarus 0.9.24, fpc 2.2.0, В Параметрах Лазаря не лазил (все по умолчанию - может там чего поменять нада?).
Доброго времени суток
Alexandre Minoshi