[ sucur @ 29.07.2005. 14:55 ] @
Ej treba mi ovo mnogo !!!
Kako da izmedju MFC dialog based app. razmjenjujem vrijednosti varijabli ?
Znaci da kreiram recimo int a = 0; i sada ja tu vrijednost pozovem iz vise dialoga i svugdje da je vrijednost 0, pa recimo u jednom dialogu izvrsim promjenu te vrijednosti na recimo 5; i poslije toga u kojem god dialogu da pozovem a da je vrijednost 5.
Nikako da to ostvarim, a treba mi mnogo, jer pravim neku igru, a nikako mi nije dovoljan prostora na samo jednom dialogu, nego mi treba njih vise.
Ajd pomozite ako znate, j*bem se oko toga 7 dana, nemam vise ideja ..
[ 3MAJ86 @ 29.07.2005. 15:02 ] @
znash shta, u krajnjoj meri mozhesh da snimash tu vrednost u neki fajl, pa svaki put kada ti treba da je uchitavash... ako je jedna vrednost u pitanju netjesh izgubiti na brzini...

dodushe sigurno ima bolja metoda da se ovo odradi, ali ovo mi je prvo palo na pamet. ako smislim neshto bolje nakuckatju...
[ leka @ 29.07.2005. 15:03 ] @
Promenljivu deklarisi u negde u glavnom fajlu (tamo gde je main() je dobro mesto) kao GLOBALNU. U modulima kasnije mozes koristiti tu varijablu odakle god zelis. U pitanju su osnovne C/C++ stvari - ako razvijas igru, onda se ocekuje da znas ove stvari...
[ 3MAJ86 @ 29.07.2005. 15:20 ] @
da ali chovek radi u MFC-u... tu bash i nema main().

probaj da napravish header fajl u koje tjesh smestiti svoje globalne promenljive... meni je tako radilo kada sam pisao svog jadnog takmichara za Code Challenge :)
[ sucur @ 29.07.2005. 15:30 ] @
Pravio sam ja header i to stalno radim, ali imam mogucnost samo da te vrijednosti korisitm u jednom dialogu.
I kada pokusam da ih korisitm u drugom dialogu, prijavi kresku da je ta vrijednost vec deklarisana u drugoj klasi.
A samo sam je pokusao iskoristiti za ispis u control edit-u.
[ sucur @ 29.07.2005. 16:00 ] @
A ima par stvari, koje se dese kada napravim novi header i u njega stavim te promjenljive i pozovem tu vrijednost u vise dialoga.
1.Kompilacija uvijek prodje bez problema.
2.Program padne pri pokretanju debag/release sa greskom :
Code:
CD error LNK2005: "int a" (?a@@3HA) already defined in CDDlg.obj

Gdje je CDDlg ime dialoga.
3.Nekada se desi, ali veoma rijetko, da se program pokrene i vrijednost se ucita u svim dialozima bez ikakvih problema, znaci ako je a = 5, u svim je prikazano 5.

E sad zasto li on nekad padne, a nekad ne pri pokretanju, a kompilacija uvijek prodje bez ijednog problema !!!

[ sucur @ 29.07.2005. 16:09 ] @
Mogu ovako da rijesim problem, ali ovo moze raditi samo lud covjek.
Da prije svakog pokretanja debaga, brisem ovaj *.obj fajl, tada se program pokrene bez problema i sve operacije sa tim brojem se odradjuju bez problema.
Al' nemozes ti ovo raditi kada radis na app sa preko 1000 linija koda, svaki put brisati obj.
MORA postojati rjesenje ovog problema !!!
[ Burgos @ 29.07.2005. 16:15 ] @
U header fajlu promenljivu moras deklarisati kao extern.

Code:
extern int m_Global


a onda joj negde dodeliti vrednost (bilo gde)

Code:
int m_Global = 4


Tako ces sve dobiti
[ yooyo @ 29.07.2005. 16:17 ] @
U jednom headeru (zajednickom za sve) napisi:

Code:
extern int g_Foo;

Na ovaj nacin naglasavas kompajleru da ce negde postojati ova promenljiva. Kompajler ce da zapamti ime a linker ce da spoji ime sa pravom globalnom promenljivom u fazi linkovanja.

A zatim taj header ukljuci u sve cpp i/ili h fajlove koji treba da ga koriste (tj. tame gde pristupas g_Foo). U SAMO jednom od CPP-ova napisi:

Code:
int g_Foo = 5;


i to je sve...

yooyo
[ sucur @ 29.07.2005. 16:18 ] @
SKONTO SAM GA NARODE !!!!
Bio je problem u tome sto sam ga deklarisao u headeru, recimo int a = 5; i on kreira *.obj fajl sa ovom vrijednoscu a.
I kada ga pokrecemo dolazi do problema, ako smo negdje u kodu deklarisali a na drugu vrijednost.
Znaci samo deklarisite ovako recimo int a; A vrijednost mu dodajte negdje drugo u kodu.
Sada radi betprijekorno.
Napokon poslije 7 dana k*ranja sa ovim !
[ sucur @ 29.07.2005. 16:21 ] @
Burgos, Yooyo nevidjoh vase odgovore, hvala vam to je to.Isti fazon !!!!:)
[ Ivan Dimkovic @ 29.07.2005. 16:23 ] @
Nemoj da stavljas globalne promenljive... ako ta aplikacija ikad postane DLL koga koristi vise niti, imacas probleme.

Hm - vise u duhu MFC-a je da stavis te clanove u implementaciju klase CWinApp na primer (to ti je glavna klasa u MFC-u, ako je tvoja aplikacija Proba, klasa se verovatno zove CProbaApp)

Parametar za pocetak mozes da stavis u public deo tvoje klase, mada je bolje da mu pristupas preko gettera i settera - u svakom slucaju i public ce odraditi posao.

Onda, gde god hoces da pristupis:

E posto tu stavis taj member - uvek mozes da mu pristupis preko:

Code:

CProbaApp *myApp = (CProbaApp *) AfxGetApp() ;

myApp->iMojaVarijabla = 5;


To ce ti videti svi dijalozi.
[ sucur @ 29.07.2005. 16:30 ] @
Najbolje ga je deklarisati u konstruktoru glavnog dialoga .