DLL i wczytanie procedury

0

Mam w programie biblioteki DLL. Wczytuję je procedurą:

procedure TForm1.Button1Click(Sender: TObject);
var
  DLL : THandle; // uchwyt biblioteki
  ShowForm : procedure;
begin
  DLL := LoadLibrary('LibSample.dll'); // laduj biblioteke
  try
    @ShowForm := GetProcAddress(DLL, 'ShowForm'); // laduj procedure
    if @ShowForm=nil then raise Exception.Create('Bład - nie mogę znaleźć proceudry w bibliotece!');
    ShowForm; // wywolaj procedure
  finally
    FreeLibrary(DLL); // wreszcie zwolnij pamiec
  end;
end;

[nazwa biblioteki zmieniona]

Lecz po wywołaniu procedury wyskakuje mi duuuuuuuużo błędów aż Windows sam zamyka program. Kod projektu biblioteki:

library Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

procedure ShowForm;
var
  Form1 : TForm1;
  Form2 : TForm2;
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end;

exports
  ShowForm;

begin
end.

Co zrobić żeby procedura była wczytywana bez błedów?
PS. Ten skrypt ściągnąłem z Artykułów w 4programmers.net

0

No bo jak można użyć Application.cos w DLL? Po prostu robi Form1 := TForm1.Create(nil) na przykład
a Form2 := TForm2.Create(Form1)

No i przecież Form2 i Form1 są pewnie jako zmienne w unit i unit2,
Poiwinno być:

  Form1 := TForm1.Create(nil);
  Form2 := TForm2.Create(Form1);
  Form1.ShowModal;

i bez zmiennych w var

0

http://4programmers.net/Forum/search.php?q=LoadLibrary+&t=AND&a=&f%5B%5D=15&f%5B%5D=1&mode=topic&sort=id&order=DESC&o=text&limit=0

nie wnikając w szczegóły nie masz kompletnie pojęcia czym jest dll i jakimi rządzi się prawami. Wypadało by najpierw cokolwiek się o tym dowiedzieć...

0

Może przy deklaracji procedury musisz dać dyrektywę ??, np.

procedure ShowForm; stdcall; // standardowe wywołanie

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