Ahoj všem, zase se obracím o drobnou pomoc k někomu tady, zatím jste mi vždy dobře poradili a já si toho velice cenním.
Teď již k tématu:
mám DWORD dwSettings[2];
(musel jsem použít pole, protože mám definováno víc než 32 flagů, takže dwSettings[0] a dwSettings[1])..
ale mám problém s funkcí, která se volá při čtení configu a má nastavovat flagy.
void MultiplayerMgr::SetFlag(DWORD num, int Status) { int ptr = num / 32; int flag = num % 32; if(status==1) dwSettings[ptr] |= num; else dwSettings[ptr] &= ~num; g_pGameServerShell->RDbg(ptr, dwSettings[ptr], -1); //vypíšeme si do debug logu ptr (0/1), a výpis hodnoty celého DWORDu //-1 značí, že RDbg() zavolala nějaká vnitřní funkce a neobsahuje //data o klientovi (odesílateli) }
a problém je jednoduchý, aplikace hapá vždycky na řádku
int ptr = num / 32;
myslel jsem že / bude fungovat - pokud je num/32 tak to hodí 1, pokud ne, hodí 0, modulo by mělo posouvat ten flag když tam přijde flag větší než je schopno pojmout dwSettings[0] tak ho uloží do [1] zase od nuly..
jakože flagy 0,1.......31 do [0]
a flagy 32, 33, ... 36 jako 0, 1, 2, 3.. do [1]
volání probíhá pro představu takhle:
...
if(Settings[18]=='1') {SetFlag(FLAG_IDINNAMES,1);} else{SetFlag(FLAG_IDINNAMES,0);}
...
int ptr = num / 32; (snažím se flagy 0-31 cpát do dwSettings[0] a další do dwSettings[1]), neví někdo kde je chyba? Musel jsem to udělat takhle, protože moje visual studio podporuje jen 32bitová pole (VS6, nesmějte se :D), nemůžu použít třeba DWORD64 a nebo LONG LONG a bohužel mám 36 flagů (0-36, takže vlastně 37) tzn. jsem nucen použít dva DWORDy.
Pokud někdo poradí budu rád :)