<div align='center'>Dll i procedury aplikacji</div>
Ci userzy którzy czytali art @0wn3ra na pewno wiedzą ,że dzięki biblioteką dll możemy z nich importować procedury i funkcje. Przydaje się to gdy program jest duży i
przy updacie nie trzeba aktualizować całego programu tylko pojedyncze dll. No właśnie ale dllki służą też jako pluginy do programu. I teraz pytanie jak
wykonywać z procedur dllki procedury i funkcje z programu? No właśnie w tym tutku postaram się wam przedstawić sposób na wykonywanie procedur z programu.
Sposób jest troszkę amatorski ale działa.
No to do roboty tworzymy nową dllke:
Uruchamiamy Delphi i tworzymy nowy projekt dllki. Definiujemy rekord jako typ:
Teraz deklarujemy 3 procedury:Kod:type **TProc = record **WstawWMEmo:procedure(Tekst:Pointer); end; var Proc:TProc;
Dodajemy Export i dllka jest gotowa:Kod:Procedure DajProc(Procc:TProc) //Procedura jest eksportowana do aplikacji i aplikacja przekazuje jako rekord procedury Begin Proc:=Procc; end; Procedure Wpisz(Tekst: PChar)**//Procedura wewnętrzna dllki będzie wykonywana do wpisania tekstu w memo Var P:^PChar; Begin P:=GetMemory(length(PChar(Tekst))); P^:= Tekst; Proc.WstawWMemo(P); end; Procedure Exec;**//Procedura eksportowana do Begin Wpisz(‘Testujemy sobie plugin xD’); End;
No teraz gdzieś zapisujemy sobie naszą dllke i kompilujemy. Teraz przyszedł czas na nasz program do odpalenia dllki. Tworzymy nowy projekt i wrzucamy na forme:Kod:exports DajProc, Exec;
- TMemo (nazwe zostawiamy Memo1)
- 2x TButton (pierwszemu daj caption ‘Zaladuj’ ,a drugiemu ‘START’);
Teraz musimy znowu zadeklarować nasz rekord:
Teraz deklarujemy procedure WstawWMemo:Kod:type **TProc = record **WstawWMEmo:procedure(Tekst:Pointer); end;
Nasz uchwyt do dll i procedury:Kod:procedure WstawWMEmo(Tekst:Pointer) var P:^pointer; Begin P:=Tekst; Form1.Memo1.Lines.Add(P^); end;
Teraz zdarzenie OnClick 1 buttona:Kod:**var **dll:THandle; **Exec:procedure; **DajProc:procedure(Procc:TProc);
No i czas na Buttona 2:Kod:procedure TForm1.Button1Click(Sender: TObject); var Proc:TProc; begin dll:=LoadLibrary('plugin.dll'); @DajProc:=GetProcAddress(dll,'DajProc'); @Exec:=GetProcAddress(dll,'Exec'); @Proc.WstawWMEmo:=@WstawWMemo; DajProc(Proc); end;
Teraz zapisujemy projekt, kompilujemy, wklejamy do katalogu z exekiem naszą dllke która powinna mieć nazwę plugin.dll i możemy startować xDKod:procedure TForm1.Button2Click(Sender: TObject); Begin Exec; //odpalenie dllki end;
Czekam na komenty i jeśli jakiś mod uzna art za przydatny to może przekleić.
Pozdrawiam AdiKX


Odpowiedź z Cytatem