Witam. Mój program składa się z 3 form, przy czym jedna umieszczona jest w pliku exe a dwie w bibliotekach dll.
Exe-c wywołuje jedną bibliotekę poprzez kod d, natomiast biblioteka wywołana przez exe-ca wywołuje drugą bibliotekę poprzez kod e. Moje pytanie brzmi. Czy takie wywoływanie bibliotek między sobą (kod e), nie obciąża zbytnio systemu w momencie, kiedy formularzy byłoby więcej w bibliotekach. I jak przerwać działanie biblioteki wywołanej przez drugą bibliotekę. Chodzi mi konkretnie o mój przykład.
{Tworzę bibliotekę z formularzem (kod a)}
library MojaDLL;
uses SysUtils, Classes,
Moja in 'Moja.pas' {F_Moja};
{$R *.res}
exports
cos_tam;
end.
{Analogicznie tworzona jest druga biblioteka MojaDLL_001}
{Kod źródłowy formularza i funkcji go obsługującej (kod b)}
unit Moja;
interface
uses Windows;
private
{ Private declarations }
public
{ Public declarations }
end;
function cos_tam (AHandle:THandle):TModalResult; StdCall;
implementation
{$R *.dfm}
function cos_tam (AHandle:THandle):TModalResult;
var F_Moja:TF_Moja;
begin
Application.Handle:=AHandle;
F_Moja:=TF_Moja.Create(Application);
try
result:=F_Moja.ShowModal;
finally
F_Moja.Free;
end;
end;
end.
{Analogicznie tworzony drugi formularz Moja_001 biblioteki}
{Moduł importowy biblioteki MojaDLL (kod c)}
unit MojaDLLImport;
interface
uses Forms;
function cos_tam(AHandle:THandle):TModalResult;
function cos_tam_001(AHandle:THandle):TModalResult;
StdCall;
implementation
function cos_tam; external 'MojaDLL.dll' name 'cos_tam';
function cos_tam_001; external 'MojaDLL_001.dll' name 'cos_tam_001';
end.
{Teraz postać jak tę bibliotekę wykorzystuje plik exe (kod d)}
implementation
uses MojaDLLImport;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
cos_tam(Application.Handle);
end;
{Natomiast biblioteka uruchomiona poprzez exe-ca wywołuje drugą bibliotekę procedurą (kod e)}.
Function cos_tam_001(AHandle:THandle):TModalResult;StdCall;
implementation
{$R *.dfm}
Function cos_tam_001; external 'MojaDLL_001.dll' name 'cos_tam_001';
(...)
procedure TF_Moje_001.Button1Click(Sender: TObject);
begin
cos_tam_001 (Application.Handle);
end;
Z góry dziękuję. :-|