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

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(&#39;plugin.dll&#39;);
@DajProc:=GetProcAddress(dll,&#39;DajProc&#39;);
@Exec:=GetProcAddress(dll,&#39;Exec&#39;);
@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