Seite 1 von 2
HRESULT auswerten
Verfasst: 03.04.2010 22:42
von Josh
verdammt noch mal, ich bekomme keine vernünftige lösung zusammen. es geht um folgendes:
von einer funktion bekommen ich in einer variablen vom typ long ein HRESULT, der dann als hexwert z.b.
$800Axxxx enthält. die prüfung sollte ungefähr so aussehen:
Code: Alles auswählen
if hexwert an stelle 1-4 = $800A dann
ausgabe xxxx als dezimalwert
else
irgendwas anderes tun
end if
wenn ich als beispiel den wert -2146827838 ($FFFFFFFF800A01C2) in hr zurückbekomme, müsste der wert 450 ausgegeben werden
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:04
von Kaeru Gaman
ist dein problem die signed-unsigned umwandlung eines kleineren Typs?
wenn du
müsste der wert 450 ausgegeben werden
erwartest, machst du schon vorher typ-fehler.
also, bitte mehr infos was du da eigentlich tust.
negiere alles mit $800A0000, und du bekommst dein Word das du haben willst.
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:05
von STARGÅTE
Code: Alles auswählen
hexwert = -2146827838
If ( hexwert & $00000000800A0000 )
Debug ( hexwert & $000000000000FFFF )
Else
Debug "--"
EndIf
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:09
von hjbremer
wie kommst du auf 450 ??????
ansonsten ev. so
Code: Alles auswählen
nr = $800A01C2
h$ = Hex(nr, #PB_Integer)
gesucht$ = "$" + Mid(h$, 1, 4)
If gesucht$ = "$800A"
wert = Val(gesucht$)
Debug gesucht$ + " gefunden = " + Str(wert)
Else
Debug "$800A nicht gefunden"
EndIf
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:10
von ts-soft
Code: Alles auswählen
Macro LoWord(long)
long & $FFFF
EndMacro
test.l = -2146827838
Debug LoWord(test)
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:29
von Josh
danke euch erst mal. hab immer probleme mit diesen unsigned sachen. irgendwie stellt sich da mein hirn immer quer, aber sollte ja eigentlich egal sein, was es ist, intern ist es ja der gleiche variablenwert. wenn es unsigned in pb geben würde, dann würden etliche verständnisprobleme gar nicht aufkommen.
so ne lösung wie von stargate wäre mir vorgeschwebt. aber das funktionert nicht ganz, weil wenn ich $00000000800A0000 durch $00000000800B0000 ersetze, dann gibt er mir noch immer den wert 450 aus.
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:32
von STARGÅTE
jo sry, ist mir eben auch aufgefallen, da ich ja mit dem & Operator nur die BIts prüfe, und nicht genau auf gleichheit !
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:41
von Kaeru Gaman
yo und das ist die Bedeutung vom "what the hell hast du eigentlich vor?"
wenn dein HiWord immer $800A ist, warum interessiert dich $800B?
wenn du das LowWord einfach alleine haben willst, warum sagst du das nicht?
oder wenn du was ganz anderes haben willst, warum drückst du dich nicht halbwegs verständlich aus?
signed oder unsigned ist irrelevant, wenn der programmierer weiß was er tut.
das ist auch der Grund, warum sich Fred darum noch keinen Kopp gemacht hat.
... also, what's up?
was willst du tun und warum?
am ende läuft sich das sowieso tot, weil du dann doch S.T.RI.P. tust, und deine Frage irrelevant wird.
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:47
von ts-soft
Meiner Meinung nach, man kann ja wieder nur raten, will er was tun, wenn LoWord <> 0 ist
und was anderes wenns 0 ist. Wenn ich recht haben sollte, steht die Lösung in meinem
vorherigem Posting, wenn nicht, halte ich mich raus, bis Josh sich ausdrücken gelernt hat,
oder zumindest die C-Beschreibung dessen hier postet, was er umzusetzen versucht.
Happy Eggs
Thomas
Re: HRESULT auswerten
Verfasst: 03.04.2010 23:48
von Josh
Kaeru Gaman hat geschrieben:wenn dein HiWord immer $800A ist, warum interessiert dich $800B?
wenn du das LowWord einfach alleine haben willst, warum sagst du das nicht?
oder wenn du was ganz anderes haben willst, warum drückst du dich nicht halbwegs verständlich aus?
weil stargate sein code einen fehler drinnen hat, sonst dürfte der code mit $800B nicht so funktionieren. er hats schon kapiert.
ich hab mir da jetzt folgendes zusammengebastelt, aber das "If hr>>16 = -32758" gefällt mit halt überhaupt nicht
Code: Alles auswählen
hr = -2146827838
If hr>>16 = -32758
MessageRequester("", "Fehler " + Str(hr & $FFFF))
Else
MessageRequester ("", "Unbekannter Fehler")
EndIf