ďťż

Ładny brzuch

Mam kodzik z 4p. dll'ka
library SimpleDLL; uses Windows; procedure About(test: PAnsiChar); stdcall; begin MessageBox(0, test, 'Hello', MB_OK + MB_ICONINFORMATION); end; exports About name 'About'; begin end.

Dodałem do niego tylko (test: PAnsiChar)

I teraz ładuje w programie tą bilbioteke dynamicznie:
procedure TForm1.Button1Click(Sender: TObject); var DLL : THandle; About : procedure; begin DLL := LoadLibrary('Test.dll'); // załadowanie pliku try @About := GetProcAddress(DLL, 'About'); // pobranie wskaźnika do procedury if @About = nil then raise Exception.Create('Nie można załadować procedury'); About; // wykonanie procedury finally FreeLibrary(DLL); end; end; end.

No i mój problem w tym - jak mieć wpływ na argument Test w procedurze About?
Bo wywołanie procedury w sposób About('tralala'); kończy się errorem :/
Użytkownik pat edytował ten post 22 lipiec 2007, 18:57


Przeanalizuj swoj kod, powoli i dokladnie.

W dllu masz:
procedure About(test: PAnsiChar); stdcall;
a w programie:
var
  DLL : THandle;
  About : procedure;
Widzisz roznice?

W programie probujesz wywolac z parametrem procedure ktora parametru nie wymaga.

już to dawno zauważyłem tylko - nie wiem jak to rozwiązać -
About(test: PAnsiChar): procedure; <- tak na pewno nie działa

procedure TForm1.Button1Click(Sender: TObject); type MyAbout = procedure(test: PAnsiChar); stdcall; var DLL : THandle; About : MyAbout; begin DLL := LoadLibrary('Test.dll'); // załadowanie pliku try About := GetProcAddress(DLL, 'About'); // pobranie wskaźnika do procedury if @About = nil then raise Exception.Create('Nie można załadować procedury'); About('ble'); // wykonanie procedury finally FreeLibrary(DLL); end; end; end.
Użytkownik PcSA edytował ten post 22 lipiec 2007, 21:12


O.o dzięki PcSA ;)
Działa bez zarzutów :)


już to dawno zauważyłem tylko - nie wiem jak to rozwiązać -
About(test: PAnsiChar): procedure; <- tak na pewno nie działa
No nie zadziala, bo przy deklarowaniu typu procedurki/funkcji - widzisz to w kodzie PcSa - parmetry podajesz po slowie kluczowym procedure/function.
Przeanalizuj kody wtyczek roznych programow, najlepiej w delphi, wtedy sie duzo nauczysz.

PS.
Funkcje deklarujesz w ten sposob:nazwa_unkcji : function (parametr1 : typ; Parametr2 : typ) :  typ; stdcall;

PcSa - a po co jeszcze nowe typy danych robic? Ja takie dynamiczne funkcje deklaruje tak:var<BR> About : procedure(test: PAnsiChar); stdcall; <BR>Jest prosciej a efekt ten sam (dziala ;)).

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •