[ BaCkSpAcE @ 05.03.2001. 11:17 ] @
Kakva je to CallBack funkcija u Windowsu?
[ BaCkSpAcE @ 05.03.2001. 23:23 ] @
Josh da dodam... to je neka stvar na koju sam naishao chitajuci neki text za masm32 za win normalno...
[ Vojislav Milunovic @ 06.03.2001. 08:38 ] @
Meni osim rekurzije nista drugo ne pada napamet...Ako je to WinAPI (a sumnjam) onda pogledaj MSDN za tu f-ju.
[ Mikky @ 06.03.2001. 11:05 ] @
Citat:
predator wrote:
Meni osim rekurzije nista drugo ne pada napamet...Ako je to WinAPI (a sumnjam) onda pogledaj MSDN za tu f-ju.

sta je rekurzija?
[ Vojislav Milunovic @ 06.03.2001. 15:30 ] @
Kad funkcija poziva samu sebe.
[ Mikky @ 07.03.2001. 23:44 ] @
jel moze neki banalni primer te rekurzije
[ Vojislav Milunovic @ 08.03.2001. 07:41 ] @
Moze :o)
recimo listanje direktorijuma sam ja radio rekurzijom...cek sacu da ti izvucem primer sa svim komentarima :

Code:
[b]
/* This function is mother of all :o)   *
 * if file is directory is is called    *
 * This one use recursion function call */
int yes_dir(const char *path){        //funny name yes_dir :o))))
 struct DIR *tmp;
 struct dirent *tmp_dir;
 /* Opening our dir path */
 tmp=(struct DIR *)opendir(path);
 /* No chdir() to that dir */
 chdir(path);
 /* Show may begin */
 while ((tmp_dir=readdir((DIR *)tmp))!=NULL){
  /* Now chceck if file is dir */
  if (!is_dir(tmp_dir->d_name)){
    /* If it isn't call cleanlog() */
    cleanlog(tmp_dir->d_name);
  }else{
    /* if dir is '.' or '..' ignore it *
     * I got SIGSEGV with this :o)     */
    if (strcmp(tmp_dir->d_name,".")!=0 && strcmp(tmp_dir->d_name,"..")!=0){
    /* Call again this function */
    yes_dir(tmp_dir->d_name);
    }
  }
}
 /* When we clean our subdir we must go one dir up */
 chdir("..");
return 0;
}
[/b]


Naime ovu funkciju sam koristio za ciscenje logova stim sto je cleanlog() fja koji dati fajl symlinkuje na /dev/null dok je is_dir() obicna funkcija koja poziva stat() i onda na stat.st_mode & S_IFDIR ako je dir vraca 1 ako nije onda 0...
Naime sta radi ova fja...
Svaki put kad je pozoves ona trazi dirove kad najde jedan ulazi u njega i trazi dalje tako sto poziva samu sebe...posle toga kad zavrsi sa petljanjem po diru izlazi iz njega i nastavlja tamo gde je stala...u prethodnom diru...(tako sto na kraju same sebe poziva chdir("..");
[ Mikky @ 09.03.2001. 10:15 ] @
ok mada sam ocekivao nesto u asembleru posto sam jos slab sa c-om ali nema veze
[ Vojislav Milunovic @ 09.03.2001. 12:56 ] @
E jebiga sad...pa najobicniji call koristis iz funckije da pozoves samu funkciju...

recimo

funcija je predator i sad je iz text segmenta pozoves sa
call predator

i u toku funkcije recimo dobijes potrebu da ponovo pozoves istu f-ju pa kucas
call predator

to je cela mudrost...znaci funkcija poziva samu sebe
[ Mikky @ 09.03.2001. 21:23 ] @
ok ok primljeno k' znanju
[ scorpio @ 18.05.2001. 09:54 ] @
Zdravo svima!

Koliko je meni poznato CallBack funkcijom (fn) naziva se tista fn, koje adresu damo kao parametar nekoj drugoj fn.

Primer (u C++, jer ja ne radim u ASM):

BOOL CALLBACK MojaCallBackFn(HWND hwnd, LPARAM lParam)
{
//ta funkcija zvat če se za svaki window
//lParam ima vrednost 123456

return TRUE;
//ako bi vratili false prekinuli bi EnumWindows
}

int main()
{
EnumWindows(&MojaCallBackFn, 123456);
}

Na istom konceptu osnovani su Eventi nekih komponenti.

Scorpio
[ Vojislav Milunovic @ 18.05.2001. 10:17 ] @
Jel ovo samo za windows prevashodno,posto stvarno nikad nisam video nesto ovako pod UNIXom...
[ scorpio @ 18.05.2001. 13:11 ] @
Pretpostavljam da slične stvari postoje i pod UNIXom, jer je to veoma fleksibilan sistem.

[ Vojislav Milunovic @ 18.05.2001. 15:25 ] @
Ne vredi uopste ne razumem primenu ove funkcije? Ako predam adresu neke funkcije drugoj ocekujem da cu da pozovem tu funkciju u okviru funkcije kojoj sam predao adresu.
Jel imas neki bukvalni primer?
[ scorpio @ 20.05.2001. 09:04 ] @
Recimo da imas neki dll (recimo PostScript interpreter).
Zoves funkciju iz dll ProcessFile, koja treba da iz ps fajla napravi bitmap.

Dobro. U ps fajlu moze bit vise strana.
Zato je taj dll napravljen tako, da uzme callback fn kao parametar.

Svaki put kad interpretar zavrsi sa svakom stranom,
zove fn, koje adresu si ti stavio na pocetku.

E sad tvoj program ima priliku da napravi sa stranom sta zeli
(stavi je na ekran, zapise u fajl, ....)

Tako je napravljen GhostScript, barem na Win platformama.
Mislim da GhostScript postoji i za Linux, UNIX, ...
i mislim da se sluzi istim principom.
[ scorpio @ 20.05.2001. 09:10 ] @
I jos nesto,

CallBack fn uglavnom se upotrebljavaju kad imas program sa vise modula
(exe i dll)

Tvoj program (exe) zove fn iz dll, i fn iz dll-a ce pre zavrsavanja jednom ili vise puta zvati neku funkciju iz exe (koje adresu si ti slao).

Zato i ime CallBack, jer ti pozivas neku fn iz dll a ta fn zove neku tvoju fn nazad.
[ Vojislav Milunovic @ 20.05.2001. 12:06 ] @
U sustini najobicnije predavanje funkcije kao parametra koja se posle poziva negde u programu ->

int callme(int (*fn)()){
fn();
}

int main(){
callme(main);
}
[ scorpio @ 20.05.2001. 20:17 ] @
Tacno!

Osim sto bi example koji si napisao uhvatio u krug
(main>callme>main>callme>main>.....)

Ali koncept je pravi.
[ Vojislav Milunovic @ 20.05.2001. 21:52 ] @
Pa da vrti se stalno ;o) Ja sam dao samo kao primer
[ scorpio @ 20.05.2001. 22:23 ] @
Znam znam,
samo sam napisao za svaki slucaj.
Ako i drugi prate nas dialog.

[ Vojislav Milunovic @ 21.05.2001. 20:31 ] @
u 10 banki da niko ovo ne prati ;o( i sutra ce neko opet da postavi pitanje sta je to CallBack funkcija
Ko je pratio neka digne 2 prsta (neka ostavi samo poruku)
[ Gojko Vujovic @ 21.05.2001. 23:31 ] @
Prati i nemoj sad da gomilamo glupe poruke ovde ne treba sad svako da se potpiše..
[ Vojislav Milunovic @ 22.05.2001. 13:14 ] @
Ma sala mala ;o)