offline
- zmmaj

- Građanin
- Pridružio: 03 Okt 2009
- Poruke: 246
|
SKRIPTING
DLL-ovi..
Dakle, neko zna, a neko nema pojma sta su, pa cu pokusati sa takvim pristupom, da prvenstveno objasnim onima koji nemaju pojma sta su DLL-ovi.
DLL= Dinamic Link Library , i jeste, ali i nije samo biblioteka, zato sto osim dinamickog povezivanja, DLL-ovi su sposobni i da izvrse ceo niz operacija, i vrate rezultat. U stvari, jedina razlika, po meni, izmedju DLL-a i exe je ta sto DLL ne moze da radi samostalno.
*.EXE aplikacija poziva DLL.
E sad, a sto bi neki samostalni program pozivao tamo neke dodatne programe?
Prvo zbog ustede u vremenu programiranja neceg sto vec postoji.
Drugo, zbog ustede u prostoru na Hdd.
Trece zato sto su postojeci DLL-ovi vec klasifikovani, i izabrani su oni sa najmanje bugova.
Sto naravno ne znaci da vi i ne probate da napravite nesto bolje. To vam niko nece zabraniti... Ali, vremenom ce te shvatiti da izmisljate toplu vodu.
Kod Game MAkera situacija sa DLL-ovima je nesto drugacija...
DLL u GM je nacin za prosirenje FUNKCIJA koje GM po svojoj prirodi NE poseduje.
Npr, GM ne moze svojim kodovima da pristupi, i ocita stanje memorije, da vam ocita graficku kartu i njene karakteristike, da formatira HDD, etc etc... Ali uz dodatak DLL-a je sve to moguce.
U stavri prosiruje GM sposobnosti na NEOGRANICENO.
USLOVI GM za sve DLL-ove.
1:GM ne moze koristiti u VisualBasic pisane DLL-ove
2: MAximalan broj argumenata =16
3: DLL mora imati specifican format, i da vrati uvek ili real number (double u C) ili null-terminated string.
4:U situaciji kada ima vise od 4 argumenata, svi argumenti moraju biti real number. Takva je trenutna siduacija.
SAMO KORISCENJE DLL-ova u GM.
DA bi GM mogao da koristi funkcije DLL-a, Svaka funkcija DLL-a se MORA ponaosob inicirati na pocetku aplikacije ( da kasnije ne bi ste zaboravili, i da ne bi vodili racuna o tome, inace, moze se inicirati i tek kada zatreba )
external_define(dll,name,calltype,restype,argnumb,arg1type,arg2type, ...)
je komanda za iniciranje DLL-a ( dll) odredjene funkcije DLL-a ( name), gde se opisuje i tip poziva( caltype) koji moze biti dvojak (dll_cdecl ili dll_stdcall) , a trazi se od DLL-a da vrati odredjeni rezultat koji opet moze biti dvojak(ty_real ili ty_string) broj ili string. OStatak su argumenti kojih moze biti maximalno 16.
- argnumb je broj koriscenih argumenata u samom pozivu.
Iz gore navedenog vam je vec jasno da bez dobre dokumentacije DLL-a, uopste i ne mozete koristiti dati dll.
Konkretno kod za iniciranje poziva bi izgledao:
global.xxx = external_define('MojDLL.DLL','MojMin',dll_cdecl,
ty_real,2,ty_real,ty_real);
Nadam se da vam je do sada jasno. idemo dalje....
Sada , kada set jednom inicirali DLL , scaki sledeci pur kada vam zatreba data finkcija mozete koristiti sledeci kod
Now whenever you need to call the functions, you use the following function:
external_call(id,arg1,arg2,...)
a, prakticno
Now whenever you need to call the functions, you use the following function:
external_call(global.xxx,arg1,arg2,...)
nastavak za 20 min.. posao..
|