Потребовалось передать Application в DLL, чтобы форму из DLL открывать модально.
В Delphi вопрос просто решается - передается Application.Handle, а в Лазаре у Application нет такого свойства..
Кто-нибудь решал такую задачу?
Модератор: Модераторы
library project1;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, Interfaces, Windows, LCLType, Unit1, Forms
{ you can add units after this };
Function ShowDllFormm:Integer; stdcall;
var
FRM:TForm1;
begin
FRM:=TForm1.Create(Application);
Result:=Frm.ShowModal;
FrM.Free;
end;
exports ShowDllFormm;
begin
Application.Initialize;
end.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,LCLType, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, dynlibs;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
type
TShowDllFormm = Function():Integer ; stdcall;
var
ShowDllFormm: TShowDllFormm;
DllHandle: TLibHandle;
// I: integer;
begin
DllHandle := LoadLibrary('project1.dll');
try
ShowDllFormm := TShowDllFormm(GetProcedureAddress(DllHandle, 'ShowDllFormm'));
ShowDllFormm;
finally
UnloadLibrary(DllHandle);
end;
end;
end.
procedure OpenFJournal(db: Pointer); external 'MyLib.dll';
procedure TfrmMain.Button1Click(Sender: TObject);
begin
Self.Enabled := False;
try
OpenFJournal(@ZConnection1);
finally
Self.Enabled := True;
end;
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 218