Problem mit Überlauf
-
Hallo,
ich bekommen aus einer DLL einen 4 Byte wert geliefert. Jedoch läuft dieser öfters über. Den Wert immer zwischenzuspeichern ist nervig, kennt jemand eine bessere Möglichkeit?danke
PS: Verschiebt den Thread nicht gleich in WinApi nur weil da DLL steht. Es ist ein C++ Problem!
-
Überläufer schrieb:
Hallo,
ich bekommen aus einer DLL einen 4 Byte wert geliefert. Jedoch läuft dieser öfters über.überlaufen kann er nur bei dir. bei was genau läuft er über?
oder kriegste von der dll öfters einen offensichtlich bereits übergelaufenen wert?
-
volkard schrieb:
oder kriegste von der dll öfters einen offensichtlich bereits übergelaufenen wert?
genau dieser fall tritt auf. Der Datentyp ist ein DWORD (=4byte -> von -2147483648 bis 2147483647)
-
DWORD ist üblicherweise vorzeichenlos definiert
-
camper schrieb:
DWORD ist üblicherweise vorzeichenlos definiert
achja und wieso kommt dann nach überschreiten des Wertes 2147483647
-2147483647 bzw. eine negative Zahl raus?
-
Überläufer schrieb:
achja und wieso kommt dann nach überschreiten des Wertes 2147483647
-2147483647 bzw. eine negative Zahl raus?Wahrscheinlich, weil _du_ den Wert in einen (signed) int oder long umwandelst. Zeig mal den Code, der dir -2147483647 ausgibt.
-
void CMyDlg::OnTimer(UINT nIDEvent) { DWORD value = GetValueFromDll(); .... } DWORD CMyDlg::GetValueFromDll() { DWORD dllvalue; //LoadLibrary etc. ... return dllvalue; }
es findet also keine Konvertierung statt!
-
Außerdem hat das nichts mit den eigentlichen Thema zu tuen! Ich wollte nur wissen ob es da eine einfachere und weniger aufwendige Möglichkeit gibt überläufe zu erkennen bzw. zu verhindern
-
wenn du einen DWORD bekommst, dann kann da auch nichts überlaufen. ausser du addierst etwas zur variable. dann könntest du z.b. einen größeren datentyp nehmen. aber erstmal könnte es - wie schon erwähnt - helfen, den wert als "unsigned" zu behandeln.
-
Überläufer schrieb:
es findet also keine Konvertierung statt!
Den wichtigen Teil des Codes hast du nicht gepostet. Was geschieht mit value, dass du -2147483647 erhältst? Im Debugger steht dieser Wert ja wohl nicht, oder?
Überläufer schrieb:
Außerdem hat das nichts mit den eigentlichen Thema zu tuen!
Wenn du den Wechsel von 2147483647 nach -2147483647 als Überlauf betrachtest, hat das sehr wohl etwas mit dem Thema zu tun.
Allgemein: Wenn der Wert immer nur größer werden kann, dann hat ein Überlauf stattgefunden, wenn der aktuelle Wert kleiner ist als der vorherige Wert. Der Umkehrschluss gilt übrigens nicht.