Mam następujący problem. Tworzę mozolnie dll-kę. W kodzie biblioteki mam pewną funkcję. Nazwijmy ją dla przykładu x. Wynikiem działania tej funkcji jest prawda albo fałsz (Boolean). Funkcja x jest wyeksportowana. Dodaję do tejże dll-ki formę, czyli okienko (File->New->Form). Umieszczam na nim przycisk i etykietę (TButton i TLabel). Programuję zdarzenie OnClick tego przycisku. I teraz clou. Chciałbym, aby przy naciśnięciu tego przycisku wykonała się funkcja x. Jak to zrobić???
No jak to co wywołać ją w zdarzeniu OnClick
//EDIT zdaje sie że załapałem w czym problem
Funkcja X jest napisana w pliku DPR np. tak
library Project1;
uses
Windows, SysUtils, Classes, Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
function X: Boolean;
begin
result:= False;
if (Application.MessageBox('Test', 'Test Funkcji w DLL', MB_YESNO) = IDYES) then
result:= True;
end;
procedure ShowForm;
begin
Form1 := TForm1.Create(Application);
Form1.ShowModal;
Form1.Free;
end;
exports X, ShowForm;
begin
end.
a chcesz ją wywołać w module formy dołączonej do tej DLL dajmy na to Unit1 czyli tak:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function X: Boolean; external 'Project1.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if X = True then
ShowMessage('Funkcja z DLL');
end;
end.
Czyli po prostu biblioteka eksportuje funkcję i jednocześnie ją importuje na potrzeby wywołania z Buttona. Chyba inaczej się nie da.
To może uściślę. Kod funkcji jest w kodzie biblioteki, czyli w miejscu które zaczyna się od library dll;. A wywołanie ma być w module formy. Tej formy, która jest w dll-ce.
kAzek właśnie o to mi chodziło. :) Ale myślałem, że jednak się da inaczej. Bo na to rozwiązanie też wpadłem. Co prawda nie wdrożyłem go, bo wydawało mi się zbyt infantylne. :)
No inaczej to tylko przenieść funkcje X do Unit1 no i oczywiście eksportować ją w Unit1;