<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:
Dodajemy Export i dllka jest gotowa:
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:
- TMemo (nazwe zostawiamy Memo1)
- 2x TButton (pierwszemu daj caption ‘Zaladuj’ ,a drugiemu ‘START’);
Teraz musimy znowu zadeklarować nasz rekord:
Teraz deklarujemy procedure WstawWMemo:
Nasz uchwyt do dll i procedury:
Teraz zdarzenie OnClick 1 buttona:
No i czas na Buttona 2:
Teraz zapisujemy projekt, kompilujemy, wklejamy do katalogu z exekiem naszą dllke która powinna mieć nazwę plugin.dll i możemy startować xD
Czekam na komenty i jeśli jakiś mod uzna art za przydatny to może przekleić.
Pozdrawiam AdiKX
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:
Kod:
type
TProc = record
WstawWMEmo:procedure(Tekst:Pointer);
end;
var
Proc:TProc;
Teraz deklarujemy 3 procedury:
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;
Dodajemy Export i dllka jest gotowa:
Kod:
exports
DajProc, Exec;
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:
- TMemo (nazwe zostawiamy Memo1)
- 2x TButton (pierwszemu daj caption ‘Zaladuj’ ,a drugiemu ‘START’);
Teraz musimy znowu zadeklarować nasz rekord:
Kod:
type
TProc = record
WstawWMEmo:procedure(Tekst:Pointer);
end;
Teraz deklarujemy procedure WstawWMemo:
Kod:
procedure WstawWMEmo(Tekst:Pointer)
var
P:^pointer;
Begin
P:=Tekst;
Form1.Memo1.Lines.Add(P^);
end;
Nasz uchwyt do dll i procedury:
Kod:
var
dll:THandle;
Exec:procedure;
DajProc:procedure(Procc:TProc);
Teraz zdarzenie OnClick 1 buttona:
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;
No i czas na Buttona 2:
Kod:
procedure TForm1.Button2Click(Sender: TObject);
Begin
Exec; //odpalenie dllki
end;
Teraz zapisujemy projekt, kompilujemy, wklejamy do katalogu z exekiem naszą dllke która powinna mieć nazwę plugin.dll i możemy startować xD
Czekam na komenty i jeśli jakiś mod uzna art za przydatny to może przekleić.
Pozdrawiam AdiKX