Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

problem so zapisom vicebytoveho prvku do void* data

tomasitto (1)|22.9.2006 10:29
Zdravim
Mam dost velky problem..a to hlavne kvoli tomu ze nasledujuci kod bez problemov funguje pod emulatorom PocketPC 2003 a tak isto aj pod obycajnym PC lebo je to klasicky C/C++ , skor C kod a pod mojim LOOXom s Windows Mobile 5.1.195 neche ist co sa cudujem..

Mam definovanu globalnu premennu
void *data=VirtualAlloc(NULL,120,MEM_COMMIT,PAGE_READWRITE);

dalej mam Funkciu
void * GetData(int offset)
{
return (byte*)data+offset;
}

dalej..
void SetDouble(double value)
{
void *ptr=GetData(50);
*(double*)ptr=value; /*-a tu nastava problem(a problem has occured with
gwes.exe..),vid dalej*/
}

Problem je vtom ze vo fcii GetData vracia data pretypovane na byte a dalej vo fcii SetDouble snazi ulozit hodnotu typu double o velkosti 8 bajtov ale neide to..Ide to ale ak ukladam hodnotu typu byte a nie double..

Ako som spominal v Emulatore a PC to jde bez problemov..Ja mam taky kod dany..pouzivam ho aplikacne..take fukcie ako SetDouble dokazem zmenit rozkuskovanim value na byty a po bytoch ho potom ulozit ale mam vela funkcii kde sa naraba s objektami a tam mi to az tak jasne nieje ale problem je podobny..je toho moc a najlepsie by bolo to co najmenej zmenit..
ak mate nejake riesenie alebo aj dotaz budem vdacny za vsetko co napisete pretoze som dost premna bezradnej sitaucii.
Dakujem
Este by ma zaujimalo kolko existuje pre PocketPC architektur kde by bola potencialna moznost vzniku podobneho problemu ze by som musel specialne upravovat kod. Kolko by som mal takychto releasov vytvorit???

RStein (2012)|24.9.2006 20:51
Priznam se, ze tento "C" old school styl me trochu desi :) A myslim si, ze tento kod moc safe neni...

U me na zarizeni i na emulatoru vas kod take spadne.

Nez zacneme resit dalsi veci, zustanme u prasaren :D - zkusil jste reinterpret_cast? Mne projde...

void SetDouble(double value)
{
void *ptr=GetData(50);
byte* val2 = reinterpret_cast (&value);
*(byte *) ptr = *val2;
}