Funkcje w DLL ponownie

0

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ć???

0

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.

0

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.

0

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. :)

0

No inaczej to tylko przenieść funkcje X do Unit1 no i oczywiście eksportować ją w Unit1;

1 użytkowników online, w tym zalogowanych: 0, gości: 1