Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!

[es] :: Pascal / Delphi / Kylix :: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!

Strane: 1 2

[ Pregleda: 1278 | Odgovora: 21 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 16:32

Hteo bih da napravim dll ( Delphi 7). Treba mi predlog za neku funkciju( najprostiju )
koja će biti u dll-u. Onda, iz programa kako da pozovovem taj Dll, način (kod)?!
Znači, kod za funkciju(dll), pa kod za program (proceduru) na osnovu koje ću pozvati tu funkciju iz dll-a...
Radio sam nešto sam ali nije mi baš sve uspelo, pa ako neko ima dobru volju da nam to svima ovde predstavi biće super...
Unapred hvala...

If you go out of your mind, do it quietly, so as not to disturb those around you...
04.03.2006. u 16:32 

delalt

Član broj: 68360
Poruke: 197
81.93.74.*



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 18:07
Evo link gdje je sve lijepo i ukratko objašnjeno, sve sa primjerima:

http://delphi.about.com/od/objectpascalide/a/dlldelphi.htm
04.03.2006. u 18:07 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
213.137.96.*

ICQ: 246436949


Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 18:30
Mmmmm... dll-ovi, paketi, plug-in-ovi... moja omiljena tema

Evo jednog prostog dll-a koji ce imati jednu funkciju:
Code:
library SimpleDll;

function Operation(X, Y: Integer): Integer; stdcall;
begin
  Result := X + Y;
end;

exports
  Operation;

begin
end.


Pisanje pocinje kljuconm recju library sto znaci da pisemo dll.

Zatim pisemo funkcije. One koje ce programi moci da pozivaju treba da imaju definisanu konvenciju poziva. Standardno je da se koristi stdcall. Ovo se pise jer drugacije konvencije poziva drugacije prosledjuju parametre.

Kada zavrsimo sa pisanjem funkcija ide exports deo u kojem pisemo koje sve funkcije dozoljavamo programima da pozivaju.

Na kraju, izmedju begin i end mozemo staviti kod koji ce se pozvati prilikom ucitavanja dll-a.

Program koji koristi ovaj dll bi mogao ovako da izgleda:
Code:
program SimpleApplication;

{$APPTYPE CONSOLE}

{$DEFINE USE_LOADLIBRARY}
{$DEFINE USE_EXTERNAL}


uses
  Windows;

{$IFDEF USE_EXTERNAL}
function OperationExternal(X, Y: Integer): Integer; stdcall;
  external 'SimpleDll.dll' name 'Operation';
{$ENDIF}

var
  {$IFDEF USE_LOADLIBRARY}
  Module: HModule;
  OperationProc: function(X, Y: Integer): Integer; stdcall;
  {$ENDIF}
  X, Y: Integer;

begin
  Write('Unesite X: ');
  ReadLn(X);
  Write('Unesite Y: ');
  ReadLn(Y);

  {$IFDEF USE_EXTERNAL}
  WriteLn('Rezultat operacije je: ', OperationExternal(X, Y));
  {$ENDIF}

  {$IFDEF USE_LOADLIBRARY}
  WriteLn('Ucitavam funkciju iz dll-a');

  Module := LoadLibrary('SimpleDll.dll');
  if Module <> 0 then
  begin
    OperationProc := GetProcAddress(Module, 'Operation');
    if Assigned(OperationProc) then
      WriteLn('Rezultat operacije je: ', OperationProc(X, Y))
    else
      WriteLn('Funkcija nije nadjena');
    FreeLibrary(Module);
  end
  else
    WriteLn('Dll nije nadjen');
  {$ENDIF}

  ReadLn;
end.


Napravio sam par kompajlerskih direktiva da bi bilo lakse da probate razlicite nacine ucitavanja funkcije iz dll-a.

Postoje dva nacina. Koriscenje rezervisane reci external i rucnim ucitavanjem dll-a i funkcije.

Kada se koristi external rezervisana rec program jednostavno nece hteti da se pokrene ako dll ili funkcija u dll-u ne postoji, dok prilikom rucnog ucitavanja mozete nastaviti sa izvrsavanjem programa uz obavestenje da nije uspelo ucitavanje funkcije.

Eto... to je ukratko to.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
04.03.2006. u 18:30 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
213.137.96.*

ICQ: 246436949


Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 18:33
Paketi imaju vecu moc od dll-a. Mogu da registruju klase, da kreiraju objekte, da rade direktno sa formama u aplikaciji i slicno, ali je potrebno i aplikaciju i paket kompajlirati istom verzijom Delphi-a. Takodje je potrebno i podesiti program tako da se paketi dinamicki ucitavaju.

Ako planiras da sam pises dodatke za svoj program i ne planiras da menjas verziju Delphi-a za razvoj onda je mozda bolje da koristis pakete.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
04.03.2006. u 18:33 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 20:58
I pretpostavio sam da ćeš se javiti, Srki_82... Isprobaću tvoj primer... Pa javim ako nešto ne bude išlo....
If you go out of your mind, do it quietly, so as not to disturb those around you...
04.03.2006. u 20:58 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 21:35
Srki_82, uspeo sam i evo okačiću primer sa source code - om, ako nekome zatreba...
If you go out of your mind, do it quietly, so as not to disturb those around you...
Prikačeni fajlovi
04.03.2006. u 21:35 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
213.137.96.*

ICQ: 246436949


Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 22:46
Zasto si mislio da cu bas ja da se javim? :)

Ovo je samo vrlo mali deo onoga sto dinamicke biblioteke mogu.
Radio sam jednu igru koja je skoro cela bila uradjena u dinamickim bibliotekama (delphi packages). U glavnom programu je bio samo framework za ucitavanje tih paketa i osnovne klase koje se u paketima koriste za kreiranje novih klasa (u mom slucaju su to bile loptice, palice i blokovi... pravio sam jednu arcanoid-like igru).
Posle je bilo vrlo lako dodavati nove vrste objekata, nivoa... prilicno fina stvar :)
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
04.03.2006. u 22:46 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 02:04
Citat:
Srki_82: Zasto si mislio da cu bas ja da se javim?


Stvar osećaja. Pratio sam malo tvoje postovanje a i tutorijal: http://www.elitesecurity.org/t...anje-novih-komponenti-Delphi-u, si dobro odradio pa sam pretpostavio da ovo držiš u malom prstu... Da, znam da je ovo samo mali deo onoga što dll - ovi mogu. Imam knjigu, Delphi 7 - Marco Cantu, koja je moram priznati jako dobra, a ovim putem je i preporučiti, ali deo o dinamičkim bibliotekama baš i nije pojednostavljen. Ovaj deo što si ti objasnio je u knjizi objašnjen na nekoliko strana, a kod tebe kroz nekoliko koraka. To mi se sviđa, jer odmah vidiš o čemu se radi. Praktičan sam čovek...
If you go out of your mind, do it quietly, so as not to disturb those around you...
05.03.2006. u 02:04 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3995
195.252.99.*

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 09:03
Jedno pitanje za Srki-ja: Da li ovako napisan DLL moze biti koriscen iz drugih programskih jezika? Citao sam nesto o DLL-ovima i video da DLL moze da se pise na 2 nacina, jedan (laksi) ako ce se DLL koristiti samo iz Delphi aplikacija i drugi (tezi) ako planiramo da se DLL koristi iz svih programskih jezika...
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
05.03.2006. u 09:03 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
213.137.96.*

ICQ: 246436949


Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 11:56
Dll koji sam napisao ranije u ovoj temi moze da se koristi u svim jezicima koji mogu da importuju funkcije iz dll-a.

Da bi dll mogao da se koristi i u drugim jezicima ne treba koristiti Delphi specific tipove podataka kao parametre funkcijama. Primer za te tipove su npr. String i Delphi klase. Delphi im svoj nacin organizovanja memorije kada su u pitanju stringovi i ako posaljemo String promenljivu kroz dll svasta moze da se desi. Slicna je situacija i sa klasama.

Kada se salju osnovni tipovi kao sto su brojevi, karakteri, pointeri i slicno... onda nema problema.

Delphi Packages su dll-ovi koji pored funkcija koje mi exportujemo, exportuju jos neke koje Delphi-u omogucavaju uzimanje dodatnih informacija (koji se sve uniti nalaze u paketu, pozivanje initalization i finalization koda iz svakog unita,...) i dozvoljavaju vecu umesanost dll-a u izvrsavanje programa (obican dll ne moze da stvara objekte i da ih prosledjuje aplikaciji dok package to moze).

I, kao sto rekoh ranije, da bi aplikacija mogla da koristi packages potrebno je da se dinamicki povezuje na standardne pakete (rtl, vcl i slicne) i zbog toga se prilikom distribucije programa moraju i ti fajlovi instalirati.

Videcu da danas napisem jedan primer za pakete... u glavnoj aplikaciji ce biti definisane samo apstraktne klase, a u paketu ce biti definisane stvarne klase koje nesto treba da rade... na osnovu textualnog fajla ce program dobiti instrukcije da kreira objekte za koje ni ne zna, ali ce informacije o njima pruziti paket i sve ce zajedno lepo da radi
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
05.03.2006. u 11:56 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
213.137.96.*

ICQ: 246436949


Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 12:00
Setio sam se jedne teme u kojem sam spomenu kako se dll-ovi mogu koristiti za izmenu prikaza kontrola. Primer koji sam pokazao je vezan za ListBox.

http://www.elitesecurity.org/poruka/891392
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
05.03.2006. u 12:00 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 12:48
http://www.elitesecurity.org/poruka/891392
Može se štošta naučiti...

Napravio sam proceduru u okviru Dll-a na osnovu koje pozivam poruke ( ShowMessage('Nesto') ), pa iz programa samo pozivam proceduru...
DLL:
Code:
library ProceduraDLL;

uses SysUtils, Classes, Dialogs;

procedure DllPoruka; export;
 begin
  ShowMessage('Delphi DLL Poruka!!!');
 end;

   exports 
    DllPoruka;

end.

Treba još otići na RUN|PARAMETERS i podesiti HOST APPLICATION na .exe koji se vezuje sa DLL-om!

A posle u programu:
Code:
...
var
    Form1: TForm1;

 procedure DllPoruka; external 'Procedura.dll'

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  DllPoruka;
end;

end.


Ako neko, ko se tek upoznaje sa DLL-ovima iz perspektive Delphi-ja, želi source ovog primera evega prikačenog...

P.S. zaboravio sam reći da sam više zainteresovan za korišćenje DLL-ova u radu s Bazama podataka...

[Ovu poruku je menjao loshmiscg dana 05.03.2006. u 13:53 GMT+1]
If you go out of your mind, do it quietly, so as not to disturb those around you...
Prikačeni fajlovi
05.03.2006. u 12:48 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 14:14
Malo sam se igrao s DLL-ovima iz Delphi - ja i evo ga jos jedan primer, prikazivanje Form-e pomoću funkcije i procedure iz DLL-a...

If you go out of your mind, do it quietly, so as not to disturb those around you...
Prikačeni fajlovi
05.03.2006. u 14:14 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 14:16
Imam jedan primer gde se iz delphi-ja poziva dll koji je pravljen u c++...
Znači delphi može pozivati funkcije i procedure iz dll-ova koji su pravljeni u drugim programskim jezicima, pa stoga verovatno i obrnuto je moguće...
If you go out of your mind, do it quietly, so as not to disturb those around you...
Prikačeni fajlovi
05.03.2006. u 14:16 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
213.137.96.*

ICQ: 246436949


Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 14:57
Hajde reci sta te tacno interesuje u vezi sa dll-ovima i bazama podataka?
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
05.03.2006. u 14:57 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 15:05
Za sad ništa konkretno, jer sam tek počeo raditi s dll-ovima, u stvari ni ne znam šta bih sve mogao raditi s dll-ovima i BP. Neki predlozi, možda, za početak?!!!
If you go out of your mind, do it quietly, so as not to disturb those around you...
05.03.2006. u 15:05 

captPicard
Denis Fable
Baderna

Član broj: 216084
Poruke: 79
*.adsl.net.t-com.hr.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!pre 3 dana i 4h
Znam da je stara tema, ali evo, da ne otvaram novu.

Ako se nekome da, zanima me kako da u dll-u napravim slijedeće:

Pomoću query-a izvadim neku vrijednost u bazi, ako se zadovoljava određeni uvjet, kao rezultat dajem neku vrijednost.

Npr. da li je ovo ok (ako sam napravio glupost, nemojte me popljuvart )?

Code:

library DLLProject;

uses
  SysUtils,
  Classes,
  IBQuery,
  IBDatabase;

function Test(Baza: TIBDatabase; sBroj:string): extended;
var
qtest: TIBQuery;
begin
qTest := TIBQuery.Create(nil);
with qTest do
begin
  DataBase := Baza;
  Close;
  SQL.Text := 'SELECT IZNOS FROM RACUNI WHERE BROJ = '+QuotedStr(sBroj) ;
  Open;

  Result := FieldByName('IZNOS').AsFloat;
end;
qTest.Free;
end;

exports
  test; 


I na kraju pitanje, kako "povezati" dll sa npr. DataModulom, da mogu koristiti u dll-u dataset koji se nalazi u nekom DataModulu?

Znam da je ovo puno pitanja, i da postoji google, ali volio bi ovdje čuti odgovor.

Hvala unaprijed.

[Ovu poruku je menjao savkic dana 09.07.2009. u 20:24 GMT+1]
F
09.07.2009. u 18:36 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1464
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!pre 3 dana i 3h
> Npr. da li je ovo ok (ako sam napravio glupost, nemojte me popljuvart )?

Trebalo bi da radi, s tim što mislim da ti je lakše da kod bude u glavnom programu, izdvajanjem u poseban dll samo komplikuješ stvari.

> Close;
> SQL.Text := 'SELECT IZNOS FROM RACUNI WHERE BROJ = '+QuotedStr(sBroj) ;
> Open;
> Result := FieldByName('IZNOS').AsFloat;

U slučaju da nema rezultata koji odgovaraju upitu, dataset je prazan i ovde bi dobio exception.

> I na kraju pitanje, kako "povezati" dll sa npr. DataModulom, da mogu koristiti u dll-u dataset koji se nalazi u nekom DataModulu?

Verujem da bi pomogla ako razjasniš šta želiš da postigneš? Moguće je da bi Delphi packages bili bolji za to, ili prosto drži sve u exeu.
09.07.2009. u 19:39 

captPicard
Denis Fable
Baderna

Član broj: 216084
Poruke: 79
*.adsl.net.t-com.hr.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!pre 3 dana i 2h
savkic, hvala na odgovoru, očekivao sam tvoj odgovor :-)

Znam da bi dobio exception, ali zanimalo me samo da li je logika dobra.

Ne interesira me ništa posebno, trenutno u svim projektima imam samo exe, ali me zanima kako funkcionira to sa .dll-ovima.

Ali evo primjera: napravio sam svoje Dialog forme (jedna je tipa upit Da/Ne sa mijenjanjemcaption-a labele, i jednu koja iam samo Ok gumb, isto sa promjenom capt u labeli). Mislio sam da bi možda bilo zgodno taj dio riješiti sa dll-om.

A o bpl sam čitao, ali nemam (nažalost) baš vremena za eksperimentiranje. Ako ti nije problem, bio bi zahvalan da mi pošalješ ako imaš neki mali projekt, par formica, datamodule i njihova međusobna interakcija po principu bpl-a.

Hvala još jednom na odgovoru!

p.s. ispričavam se, zaboravio sam staviti code u postu prije.
F
09.07.2009. u 20:33 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1464
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!pre 3 dana
> Ali evo primjera: napravio sam svoje Dialog forme (jedna je tipa upit Da/Ne sa mijenjanjemcaption-a labele, i jednu koja iam samo Ok gumb, isto
> sa promjenom capt u labeli). Mislio sam da bi možda bilo zgodno taj dio riješiti sa dll-om.

To svakako može biti dobar primer za učenje, kada koristiš forme iz dlla, bitno je da i u dll koristiš application iz glavnog exea, bilo je ranije priče o tome i primera.

> A o bpl sam čitao, ali nemam (nažalost) baš vremena za eksperimentiranje. Ako ti nije problem, bio bi zahvalan da mi pošalješ ako imaš
> neki mali projekt, par formica, datamodule i njihova međusobna interakcija po principu bpl-a.

Ne koristim pakete pa nemam ni neki primer, ali je princip jednostavan, napraviš novi paket, ubaciš koje hoćeš unite i kasnije u project optionsu dodaš taj paket, u samom kodu ništa ne moraš da menjaš.
09.07.2009. u 22:52 

[es] :: Pascal / Delphi / Kylix :: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!

Strane: 1 2

[ Pregleda: 1278 | Odgovora: 21 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.