DLL i wczytanie procedury

DLL i wczytanie procedury
MA
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 15 lat
  • Postów:46
0

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

Kopiuj
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:

Kopiuj
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

FO
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 15 lat
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ć:

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

i bez zmiennych w var


Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
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ć...


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
SZ
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 15 lat
  • Postów:3356
0

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir "Szczawik" Włodkowski
J1
  • Rejestracja:prawie 18 lat
  • Ostatnio:ponad 17 lat
0

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

Kopiuj
procedure ShowForm; stdcall; // standardowe wywołanie

http://www.ozon3.cba.pl - alternatywny komunikator internetowy, freeware, bez spyware i reklam, obsługa GG i wiele innych ;]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.