[TUT] Dll i procedury aplikacji

adikx

Użytkownik
Dołączył
Maj 21, 2007
Posty
415
<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('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
 
Do góry Bottom