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: 6135 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 16:32 - pre 219 meseci
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...

Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

delalt

Član broj: 68360
Poruke: 198
81.93.74.*



Profil

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

http://delphi.about.com/od/objectpascalide/a/dlldelphi.htm
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
213.137.96.*

ICQ: 246436949


+10 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 18:30 - pre 219 meseci
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.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
213.137.96.*

ICQ: 246436949


+10 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 18:33 - pre 219 meseci
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.
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 20:58 - pre 219 meseci
I pretpostavio sam da ćeš se javiti, Srki_82... Isprobaću tvoj primer... Pa javim ako nešto ne bude išlo....
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 21:35 - pre 219 meseci
Srki_82, uspeo sam i evo okačiću primer sa source code - om, ako nekome zatreba...
Someone's sitting in the shade today because someone planted a tree a long time ago.
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
213.137.96.*

ICQ: 246436949


+10 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!04.03.2006. u 22:46 - pre 219 meseci
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 :)
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 02:04 - pre 219 meseci
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...
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
195.252.99.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 09:03 - pre 219 meseci
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...
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
213.137.96.*

ICQ: 246436949


+10 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 11:56 - pre 219 meseci
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
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
213.137.96.*

ICQ: 246436949


+10 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 12:00 - pre 219 meseci
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
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 12:48 - pre 219 meseci
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]
Someone's sitting in the shade today because someone planted a tree a long time ago.
Prikačeni fajlovi
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 14:14 - pre 219 meseci
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...

Someone's sitting in the shade today because someone planted a tree a long time ago.
Prikačeni fajlovi
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 14:16 - pre 219 meseci
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...
Someone's sitting in the shade today because someone planted a tree a long time ago.
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
213.137.96.*

ICQ: 246436949


+10 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 14:57 - pre 219 meseci
Hajde reci sta te tacno interesuje u vezi sa dll-ovima i bazama podataka?
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

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



Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!05.03.2006. u 15:05 - pre 219 meseci
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?!!!
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!09.07.2009. u 18:36 - pre 179 meseci
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
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!09.07.2009. u 19:39 - pre 179 meseci
> 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.
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!09.07.2009. u 20:33 - pre 179 meseci
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
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Dinamičke biblioteke DLL - ovi iz perspektive Delphi-ja?!!!09.07.2009. u 22:52 - pre 179 meseci
> 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š.
 
Odgovor na temu

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

Strane: 1 2

[ Pregleda: 6135 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

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