|
[ jc denton @ 17.02.2002. 00:45 ] @
|
Pazi ovamo ...
Iz VB saljem pointer (long) na prvi element niza, a u VC++ (tj u dll)
primam tu brojku. Mozda ne treba da se salje ByVal nego ByRef ??
Kako na ovaj ili neki drugi nacin da se prosetam kroz niz u dll-u ako imam pointer na prvi element niza koji sam poslao dll-u iz VB-a.
Tako mu je to kad ne znam da se setam po nizovima uz pomoc pointera u vc++.
Vazno :
Niz je byte tipa, tj onaj pointer na prvi element je u stvari pointer na memorijsku adresu odakle pocinje memorijski blok koji bi da obradim.
|
[ Dragi Tata @ 17.02.2002. 01:15 ] @
Nisam baš siguran da sam te potpuno razumeo (u poslednje vreme sve češće počinjem postove tim rečima) ali mi se čini da si u VB-u definisao neki niz bajtova, pa hoćeš da pristupiš članovima tog niza u C funkciji (u DLL-u).
Pazi ovaj detalj: u VB-u, niz je u stvari ("ispod haube") SAFEARRAY. Međutim, kako je niz i unutar SAFEARRAY poređan sekvencijalno, to znači da možeš da pošalješ numerički niz dll-u tako što ćeš da pošalješ prvi element niza ByRef.
Sa C strane (u dll-u) dobijaš pointer na prvi član niza, a time i na ceo niz.
Primer:
sa VB strane:
Private Declare Function MyCFunction (ByRef array as Any, ByVal numEl as Long)
...
Dim array(3) as Long
array(0) = 1
array(1) = 2
array(2) = 3
MyCFunction array(0), 3
Sa C strane:
void MyCFunction (int* array, int numEl)
{
int i = 0;
for (i = 0; i < numEl; i++)
{
...
}
}
Možda sam se negde prešao u sintaksi, ali ideja je ta.
[ jc denton @ 17.02.2002. 01:41 ] @
Sve mi je jasno ali kako da u C++ referenciram prvi element niza kao sto bi uradio u VB na sledeci nacin :
vrednost = a(1)
Kako ovo da napisem u C++ ?
Ja u stvari ocu da uporedim dva niza veoma brzo (koristeci C++ DLL), a iz VB u DLL mogu da prosledim varptr(a(1)) i varptr(b(1)) ako su a i b nizovi koji se uporedjuju !
Varptr(a(1)) daje pointer na prvi element niza a.
[ Dragi Tata @ 17.02.2002. 02:28 ] @
Prvi element niza dobijaš:
vrednost = a[0] ;
Nego, nema potrebe da koristiš varptr. Samo pošalji prvi element niza ByRef.
I još nešto. U C-u ne postoji Option Base. Tamo je prvi element niza UVEK a[0], a poslednji a[n-1].
[ jc denton @ 17.02.2002. 05:24 ] @
Sta kazes - programeri broje od nule a ostatak sveta od 1 ... , moracu i ja da predjem na VC++ jer me VB sve vise sputava kod low level funkcija.
Hvala puno za savete, inace ovo mi je trebalo da bi brzo uporedio frejmove pri Avi Capture (video nadzor).
pozdrav !
[ jc denton @ 19.02.2002. 18:00 ] @
Imam jos jedan problem as DLL-om koji sam poceo da radim :
Kompajliranje i Build prodje, ali kad ga registrujem sa :
regsvr32 roundme.dll
Prijavi sledecu poruku :
'roundme.dll was lodaded but DllRegisterServer entry point was not found.
DllRegisterServer may not be exported or corupt version of roundme.dll maybe in memory.'
Inace DLL funkcionise sem sto javlja ovu gresku pri instalaciji.
[ Dragi Tata @ 19.02.2002. 18:10 ] @
Citat: jc denton:
Imam jos jedan problem as DLL-om koji sam poceo da radim :
Kompajliranje i Build prodje, ali kad ga registrujem sa :
regsvr32 roundme.dll
Prijavi sledecu poruku :
'roundme.dll was lodaded but DllRegisterServer entry point was not found.
DllRegisterServer may not be exported or corupt version of roundme.dll maybe in memory.'
Inace DLL funkcionise sem sto javlja ovu gresku pri instalaciji.
Pazi ovako: registruju se samo ActiveX DLL-ovi (u C svetu još poznati kao COM serveri). U VB-u je to jedina vrsta DLL-a koja može da se napravi, ali u C-u postoje i "obični" DLL-ovi, koji ne treba da se registruju.
[ jc denton @ 19.02.2002. 21:20 ] @
Citat: Dragi Tata:
Pazi ovako: registruju se samo ActiveX DLL-ovi (u C svetu još poznati kao COM serveri). U VB-u je to jedina vrsta DLL-a koja može da se napravi, ali u C-u postoje i "obični" DLL-ovi, koji ne treba da se registruju.
[/quote]
Znaci samo kazem u deklaraciji koja je putanja do njega i gotovo?
[ Dragi Tata @ 19.02.2002. 21:33 ] @
Citat: jc denton:
Znaci samo kazem u deklaraciji koja je putanja do njega i gotovo?
Tako je. Nego, pazi ovu caku: ako startuješ VB sa Start menija, smatraće da mu je App.Path negde u Project Files... blalbla, pa može da ti se desi da ne nađe tvoj dll iako je u istom direktorijumu gde i tvoj VB projekat. Rešenje je da startuješ VB projekat tako što ga duplo-klikneš iz Explorera. Tada će da traži dll u "tekućem" direktorijumu.
Inače, mislim da je dobra ideja da se "obični" dll-ovi ne kopiraju u Windows/System, nego da budu u istom folderu kao i exe.
[ jc denton @ 19.02.2002. 22:55 ] @
Inace za App.Path - no problemo.
E, evo ga kod za onaj dll sto pokusavam da uradim (zakacen je uz poruku).
Da li je sve ok, i ima li neceg nepotrebnog ?
A kako bi napisao sledece u C++ (onoj petlji u dll-u sto mi je za uporedjivanje) :
u VB bi bilo ovako :
if (niza(i) <> nizb(i)) Xor bajt then ... bajt je naravno byte tipa
Ivan Dimkovic mi je jos pre odgovorio za xor sledece :
__inline XorArray(unsigned char *array, int size, int xor_value)
{
for(x=0;x<size;x++)
array[x] ^= xor_value;
}
ali ovo ne umem da primenim.
Jel moze ovaj __inline nekako da ubrza stvar u mom dll-u ?
Ivan rece da u ovom slucaju ne moze ...
[ Dragi Tata @ 19.02.2002. 23:07 ] @
Uh, izgleda da je Ivan malo zbrzio. Evo ispravljena verzija njegove funkcije:
Code:
void XorArray(unsigned char *array, int size, int xor_value)
{
int x;
for(x=0;x<size;x++)
array[x] ^= xor_value;
}
a inline slobodno zaboravi u ovom slučaju. Ako te stvarno interesuje šta je to, objasniću ti drugom prilikom.
Za dll koji si poslao, pogledaću verovatno sutra. Danas nemam kad.
Pozdrav.
[ leka @ 19.02.2002. 23:09 ] @
Citat: jc denton:
Sta kazes - programeri broje od nule a ostatak sveta od 1 ... , moracu i ja da predjem na VC++ jer me VB sve vise sputava kod low level funkcija.
Hvala puno za savete, inace ovo mi je trebalo da bi brzo uporedio frejmove pri Avi Capture (video nadzor).
pozdrav !
Ja se ne bih slozio sa tobom po tom pitanju... M$ sve vise razvija VB i to je ono sto je najsmesnije - daje mu neke stvari koje ce 0.1% programera koristiti (stvari koje C ima od pocetka). Sa druge strane M$ takodje menja svoj VC++ jer zeli da sve svoje "kompajlere" nekako poveze u jednu celinu i smatram da su sami jezici na neki svoj specifican nacin "izvestaceni"...
VB je sve mocniji i mocniji i sve lakse i lakse moze da se programira "nisko", ali kome to treba? Koliko VB programera zaista oseca potrebu za tim? - To je pitanje za diskusiju.
Kad budes presao na VC++ kukaces za nekim stvarima koje imas u VB, to je tako... A i logicno je. Ja sam vise puta pokusavao ljudima da objasnim da svaki jezik ima svoju primenu. Nauci OBA jezika, to je najbolje. DLLove i "core" stvari razvijaj u C/C++, a za primenu je VB dusu dao. Tu sije sve moguce jezike (za Wintendo). Polako ali sigurno na scenu stupa Zmija (Python), ali ko zna kako ce se stvari razvijati, moguce je da ce i M$ da napravi svoju verziju Python-a... Ja licno Python ne volim, ali priznajem da je mnooogo mocan. Huh, malo sam odleteo od teme... Izvinite. :)
[ jc denton @ 19.02.2002. 23:14 ] @
Citat: Dragi Tata:
Uh, izgleda da je Ivan malo zbrzio. Evo ispravljena verzija njegove funkcije:
Code:
void XorArray(unsigned char *array, int size, int xor_value)
{
int x;
for(x=0;x<size;x++)
array[x] ^= xor_value;
}
a inline slobodno zaboravi u ovom slučaju. Ako te stvarno interesuje šta je to, objasniću ti drugom prilikom.
Za dll koji si poslao, pogledaću verovatno sutra. Danas nemam kad.
Pozdrav.
Ok. Izvini ako te davim !
Za inline nije neophodno, mozda je jos prerano za mene ... a inace me interesuje.
Pozdrav !
[ jc denton @ 19.02.2002. 23:20 ] @
Citat: leka:
Citat: jc denton:
Sta kazes - programeri broje od nule a ostatak sveta od 1 ... , moracu i ja da predjem na VC++ jer me VB sve vise sputava kod low level funkcija.
Hvala puno za savete, inace ovo mi je trebalo da bi brzo uporedio frejmove pri Avi Capture (video nadzor).
pozdrav !
Ja se ne bih slozio sa tobom po tom pitanju... M$ sve vise razvija VB i to je ono sto je najsmesnije - daje mu neke stvari koje ce 0.1% programera koristiti (stvari koje C ima od pocetka). Sa druge strane M$ takodje menja svoj VC++ jer zeli da sve svoje "kompajlere" nekako poveze u jednu celinu i smatram da su sami jezici na neki svoj specifican nacin "izvestaceni"...
VB je sve mocniji i mocniji i sve lakse i lakse moze da se programira "nisko", ali kome to treba? Koliko VB programera zaista oseca potrebu za tim? - To je pitanje za diskusiju.
Kad budes presao na VC++ kukaces za nekim stvarima koje imas u VB, to je tako... A i logicno je. Ja sam vise puta pokusavao ljudima da objasnim da svaki jezik ima svoju primenu. Nauci OBA jezika, to je najbolje. DLLove i "core" stvari razvijaj u C/C++, a za primenu je VB dusu dao. Tu sije sve moguce jezike (za Wintendo). Polako ali sigurno na scenu stupa Zmija (Python), ali ko zna kako ce se stvari razvijati, moguce je da ce i M$ da napravi svoju verziju Python-a... Ja licno Python ne volim, ali priznajem da je mnooogo mocan. Huh, malo sam odleteo od teme... Izvinite. :)
Generalno se slazem, a VB-a se ni ja ne bi nikako odreko. Samo izgleda da ne moze uvek sve da se zavrsi u njemu - sto me po neki put strasnooo nervira. Ajde nabaci novu temu u VB forumu pa da popricamo o nekim low level stvarima sa ostalim 0.1% korisnika koji koriste VB-u dostupan API itd.
:)
[ Dragi Tata @ 20.02.2002. 16:47 ] @
Citat: jc denton:
Ok. Izvini ako te davim !
Za inline nije neophodno, mozda je jos prerano za mene ... a inace me interesuje.
Pozdrav !
Ama ne daviš me, volim ja da pomognem ljudima koji stvarno "grizu", samo u ovoj Americi mora malo i da se radi :)
Nego, natrpao si mnogo nepotrebnih stvari tamo. Sve što ti treba je jedan .cpp fajl koji sadrži sledeće:
Code:
extern "C" __declspec(dllexport) int brrazlicitih(int* niza, int* nizb, int koliko)
{
int j = 0;
int vraca = 0;
for (j = 0; j < koliko; j++)
{
if ( niza[j] != nizb[j] )
vraca++;
}
return vraca;
}
Ako mu promeniš ekstenziju u .c , onda ti ne treba ni ono extern "C".
Uglavnom, malo sam uprostio funkciju, jer mi je Gojko objasnio zašto se ne vidi i u uglastim zagradama.
Def fajl ti ne treba ako koristiš declspec.
Nego, evo ti jedan sajt kao stvoren za tebe:
http://www.boondog.com/..%5Ctutorials%5Cdlltutor%5Cdlltutor.htm
[ jc denton @ 21.02.2002. 00:56 ] @
Pobrisao sam sve ostale fajlove osim .cpp ali nesto ne radi. Javlja 'Bad dll calling convention'. Inace compile i build prolaze.
U vb-u deklaracija je ovakva :
Private Declare Function brrazlicitih Lib _
"c:\windows\desktop\roundme.dll" _
(ByRef niza As Any, ByRef niza As Any, ByVal koliko As Long) As Long
.cpp izgleda sada ovako (kako si i napisao) :
#define STRICT
#include <windows.h>
HINSTANCE hInst ; //dll's instance handle ' jel ovo treba da ostane ?
extern "C" __declspec(dllexport) int brrazlicitih(int* niza, int* nizb, int koliko)
{
int j = 0;
int vraca = 0;
for (j = 0; j < koliko; j++)
{
if ( niza[j] != nizb[j] )
vraca++;
}
return vraca;
}
[ Dragi Tata @ 21.02.2002. 04:47 ] @
Citat: jc denton:
Pobrisao sam sve ostale fajlove osim .cpp ali nesto ne radi. Javlja 'Bad dll calling convention'. Inace compile i build prolaze.
U vb-u deklaracija je ovakva :
Private Declare Function brrazlicitih Lib _
"c:windowsdesktoproundme.dll" _
(ByRef niza As Any, ByRef niza As Any, ByVal koliko As Long) As Long
.cpp izgleda sada ovako (kako si i napisao) :
#define STRICT
#include <windows.h>
HINSTANCE hInst ; //dll's instance handle ' jel ovo treba da ostane ?
extern "C" __declspec(dllexport) int brrazlicitih(int* niza, int* nizb, int koliko)
{
int j = 0;
int vraca = 0;
for (j = 0; j < koliko; j++)
{
if ( niza[j] != nizb[j] )
vraca++;
}
return vraca;
}
Uh, zaboravio sam na calling convention. Prepravi deklaraciju na
extern "C" __declspec(dllexport) int WINAPI brrazlicitih(int* niza, int* nizb, int koliko)
ili
extern "C" __declspec(dllexport) WINAPI int brrazlicitih(int* niza, int* nizb, int koliko)
(zaboravio sam gde tačno ide WINAPI, iskren da budem). U svakom slučaju pogledaj onaj sajt na koji sam ti ostavio link gore. Tamo detaljno objašnjavaju kako da napraviš dll. Jedino što koriste .def fajl, a ne __declspec(dllexport) za eksportovanje funkcija. Ako ne ide, javi da probunarim malo.
A
HINSTANCE hInst ;
ti ne treba
[ jc denton @ 22.02.2002. 04:30 ] @
Citat: Dragi Tata:
Uh, zaboravio sam na calling convention. Prepravi deklaraciju na
ti ne treba
Nije bilo do onog 'WINAPI' nego sam malo kombinovao pa je proradilo (valjda sam vratio .def ili .h fajl ili oba...)
[ Dragi Tata @ 22.02.2002. 15:54 ] @
Vratio si .def fajl. Onda ti ne treba ni declspec
[ Dragi Tata @ 24.02.2002. 18:23 ] @
Nego, kako to misliš "nije bilo do onog WINAPI" ? Siguran sam da jeste i da će da proradi ako ubaciš WINAPI na pravo mesto, čak i bez def fajla.
Uostalom, ako ti već radi, nema veze :)
[ jc denton @ 25.02.2002. 09:16 ] @
U pravu si, ja sam pogresio. Znas kako je kad nikada nisam radio u c++...
[ jc denton @ 25.02.2002. 18:42 ] @
Evo koda iz onog dll-a. Radi super, ali da li moze ovo nekako da se optimizuje da radi jos brze ?
Cini mi se da se vreme u stvari gubi na poziv ove funkcije (poziv iz VB-a), jer na pr. ako imam 500 kb da obradim, za 1 megabajt nije srazmerno vece vreme obrade.
Da li moze da se poziva nekako brze ?
Kada u VC++ ukljucim optimizaciju (optimize : maximize speed) pri build javlja se greska:
'Command line error D2016 : '/ZI' and '/O2' command-line options are incompatible'
Code:
#define STRICT
#include <windows.h>
__declspec(dllexport) int WINAPI
brrazlicitih(
unsigned char* prvif, //prvifrejm
unsigned char* drugif, //drugi frejm
unsigned char* videobaf, //obradjeni frejm za prikaz smetnji
unsigned char* maska, //niz za maskiranje, sta se nadgleda a sta ne
unsigned char* filterbajt, //bajt za xor-ovanje
int koliko) //koliko bajta se uporedjuje
{
int j = 0;
int razlbajt = 0;
for (j = 0; j < koliko; j=j+2)
{
if ( maska[j] == 0 ) // kontrola koji se bajtovi uporedjuju
{
if ( (*(prvif+j) ^ *(drugif+j)) & *(filterbajt) )
{
razlbajt++; // broj razlicitih bajtova
videobaf[j] = 'a'; // obrada tekuceg frejma
videobaf[j+1] = 'a'; // prosto mu se dodaje neka boja da bi se videli pixeli koji se menjaju
}
}
}
return razlbajt;
}
[ Dragi Tata @ 25.02.2002. 20:29 ] @
Ona greška se obično javlja kada pokušavaš da uključiš optimizaciju u Debug verziji. Dakle, promeni na Release verziju (Build-Set Active Configuration - Release) i ne bi trebalo da bude problema. A može i da se desi ako probaš da uključiš debug informacije u Release verziju, ali ne verujem da je to slučaj.
A ako misliš da je pozivanje funkcije problem, to vreme možeš da skratiš ako funkciju koja poziva brrazlicitih (nadam se da je to jedna funkcija) prevedeš u C i prebaciš u dll. Onda ispred brrazlicitih stavi inline i ukloni declspec. Onda pozivaj tu drugu funkciju iz VB-a (samo jednom?).
Nadam se da nisam bio previše nejasan.
[ jc denton @ 26.02.2002. 13:56 ] @
e pa sada radi bas kako treba, samo kako se optimizuje (i da li moze) za neki set intrukcija (MMX) ?
Hvala jos jednom.
pozdrav
[ Ivan Dimkovic @ 26.02.2002. 14:05 ] @
Za MMX/SSE/3DNow! kod optimizujes primenom inline assembly jezika -
na primer:
Code:
__asm {
movq mm2, mm0
punpcklbw mm2, mm1
punpckhbw mm0, mm1
emms
}
(Napomena - ovaj MMX kod ne radi nista pametno)
Moras poznavati MMX/SIMD/3DNow! assembler da bi mogao da optimizujes neku f-ju..
[ jc denton @ 26.02.2002. 14:23 ] @
znaci u mom slucaju 'pisi propalo' ...
[ jc denton @ 11.03.2002. 19:51 ] @
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 :).
[ Dragi Tata @ 11.03.2002. 21:41 ] @
Evo kako bi to moglo "na brzaka" da se odradi.
Ubaciš u C++ dll funkciju
Code:
long GetbrrazlicitihAdresu()
{
long ret = &brrazlicitih;
return ret;
}
to staviš POSLE brrazlicitih, i dodaš mu ono declspec i WINAPI i sve isto kao za brrazlicitih. Onda tu funkciju jednom pozoveš iz VB-a da dobiješ adresu brrazlicitih, a dalje je lako...
A što se tiče "okidanja" callback-a dok je još funkcija u toku, ja se ne bih previše sekirao oko toga, jer po ovom što si naveo vidim da se za poziv callback-a koristi message queue a ne posebna nit, pa će zahtevi da stižu jedan po jedan.
Upozorenje: ovo gore sam kucao "iz glave" pa nije nemoguće da sam se negde zeznuo. Ako bude problema, viči...
[ jc denton @ 12.03.2002. 13:43 ] @
Zamisli, proradilo je ! Samo dobar je ovaj operator &, nisam znao da moze biti pointer i na funkciju u c++.
Sada samo jos da isprebacam sve iz VB-a u DLL i gotovo, ovo ce malo duze da potraje :)
Nego jel ima neko brzo objasnjenje za sledece u VC++:
u VB-u : Stavim dugme na formu, dupli klik na njega i proceduri sam za to dugme.
Kako bi to bilo u VC++?
nesto na brzaka, pa cu ja da eksperimentisem i proucim.
Pozdrav
[ Dragi Tata @ 12.03.2002. 15:57 ] @
Vrovao ili ne, isto i u VC-u: "nacrtaš" dugme, duplo klikneš, i već si tamo.
Mada, za razna podešavanja izgleda forme (boje, itd) VB je ipak mnogo bolji...
[ jc denton @ 30.09.2002. 15:33 ] @
Da podsetim na problem, imam pointer :
unsigned char* prvif
koji ukazuje na prvi bajt niza bajtova u memoriji.
Do sada sam pristupao pojedinacnim bajtovima kako je Dragi Tata opisao, a sada mi je potrebno da taj memorijski blok obradjujem kao matricu. Da li je moguce da se 'napravi' matrica na osnovu onog pointera i kako su onda 'napakovani' elementi matrice u memoriji, tj. da li je raspored sledeci :
a[0][0] a[0][1] a[0][2] ..., ili ?
Hteo bi da izbegnem memcpy i sl., ako je to moguce.
Pozdrav
[ Preeky @ 03.10.2002. 03:27 ] @
Skoro mi je nesto slicno zatrebalo i ovako mi bilo najlakse da uradim
recimo da ti taj pointer pokazuje na niz od 20 bajtova u memoriji;
tu matricu mozesh da zamislish kao 4 x 5
o o o o o
o o o o o
o o o o|o|
o o o o o
e sad ti recimo treba pozcija [2][4]; posto je niz 1D pristupash ovako :
niz[4 + 2*sirina];
sirina je u ovom slucaju 5
znaci samo oblikuj niz u glavi u odgovarajucu matricu.
[ Preeky @ 03.10.2002. 15:56 ] @
Citat: jc denton:
Hvala u svakom slucaju, a je l' to bese onaj Preeky sa Bechmark-a ? ;)
ja sam :)
[ jc denton @ 17.02.2005. 00:14 ] @
Dakle, tu smo.
Prodjose i tri godine (za malo) od kada sam prvi put postovao na dragom nam [es]-u. Te noci, posle velike muke sa C-om :o), nabasam ti ja na ovo chudo i vidim da se tu ipak nesto pametno prica. Rekoh, cek da priupitam ove ovde. I tako, od ove prve diskusije krenem da aktivno posecujem [es], cak mi je u nekim momentima to bila i potreba, ne zato sto sam nesto pitao ili pokrenuo neku diskusiju u svoju korist, nego, eto, bilo mi je jako zanimljivo i nekako mi je postala navika da cim izadjem na net prvo vidim sta ima u carsiji - [es] :)
E, moram da kazem i da je tada bilo malo opustenije i za mene bar interesantnije na neki nacin. Kratke diskusije, ne kilometarske, ali jako interesantne, programiranje uglavnom. I tako, vremenom su stigli i profesionalci, neki novi moderatori, ljudi se bore ko ce da moderise svoj forum bolje. Stvaraju se i novi forumi. Modovi dolaze i odlaze, ali ipak mi se cini da je cela stara ekipa i dalje tu. Hehe, navike se tesko izgube... ja bar jos uvek planiram da budem drug clan... i ne ide mi se nikako ;)
Nadam se da staroj ekipi nije dosadio [es] i da cemo da proslavimo i neku deceniju valjda ;)
A, nadam se da [es] i dalje ima slican uticaj na nove korisnike, jer da nema... ne bi bio [es].
Ajd' u zdravlje.
[ Dragi Tata @ 17.02.2005. 15:54 ] @
E, pa živ nam bio druže člane, na mnogaja ljeta.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|