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?

Code: Alles auswählen

a.l = $800A01C2
Debug a
b.q = a & $FFFFFFFF
Debug b
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