Evo mene opet sa jednim (meni) interesantnim problemom.
Naime, koristim jednu callback funkciju u VB-u, koja se 'okine' svaki put kada se frejm bafer od capture katice 'napuni'. Kad se to desi iz te callback funkcije poziva se C funkcija (brrazlicitih) iz dll-a koja vrsi neka poredjenja. Posto se ovo stalno 'vrti' dosta vremena gubim na pozivanje doticne C funkcije koja je u dll-u.
Da bi objasnio sta hocu, moram da napravim mali uvod.
FrameCallBack (ByVal lwnd As Long, ByVal lpvhdr As Long) As Long - callback funkcija koja se okida u ovom slucaju (funkcija je u VB-u). Ovu funkciju ja ne pozivam direktno nego je poziva drajver (valjda), pri 'dolasku' svakog novog frejma. Kada se ova callback funkcija okine, promenljiva lpvhdr daje adresu frejm bafera, preko koje pristupam podacima za obradu (varptr(lpvhdr)). Znaci u C++ morala bi analogno ovome da se deklarise.
Da bi sve ovo ovako radilo mora da se 'omoguci' ova callback funkcija na sledeci nacin :
SendMessage(lwnd, WM_CAP_SET_CALLBACK_FRAME, 0, AddressOf FrameCallback)
lwnd - hWnd od capture prozora koji prima poruku - nebitno
AddressOf FrameCallback - ovako se dobija adresa fn FrameCallback
Znaci skica celog procesa izgleda ovako :
novi frejm u baferu > okida se FrameCallBack > iz FrameCallBack funkcije poziva se brrazlicitih (koji je u DLL-u)
i tako u krug. Ovo se desava najmanje 10 puta u sekundi. Pa posto funkcija brrazlicitih treba da izvrsi obimna uporedjivanja, kako da dodjem do njene adrese u VB-u ? AddressOf u ovom slucaju nece moci, probao sam.
Mozda bi mogao da pozovem brrazlicitih kao do sada, pa da u DLL saznam njenu adresu, vratim tu vrednost u VB i onda ponovo setujem callback ali sa adresom od brrazlicitih ? Ovo je samo ideja, posto u C++ verovatno moze da se sazna adresa funkcije brrazlicitih, ako vec ne moze iz VB-a.
Jednostavno bi hteo da mi funcija brrazlicitih bude callback funkcija, a ne FrameCallBack koju bi da zaobidjem i ustedim vreme na poziv ove funkcije.
Znaci, da li postoji nacin da saznam adresu neke API funkcije, ili funkcije koja je u DLL-u, kao sto je kod mene slucaj ?
I jos nesto. Sta se desava ako se callback okine ponovo dok je poredjenje (u DLL-u) u toku ???
Znaci fn brrazlicitih u DLL-u jos nije zavrsila posao, a stize novi callback koji zove opet istu fn.
Kako da ovo sinhronizujem ???
Ili je sve ovo samo pusta teorija za one koji rade u VB-u :).
fire, walk with me