HRESULT auswerten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

HRESULT auswerten

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: HRESULT auswerten

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: HRESULT auswerten

Beitrag von STARGÅTE »

Code: Alles auswählen

hexwert = -2146827838 

If ( hexwert & $00000000800A0000 )
 Debug ( hexwert & $000000000000FFFF )
Else
 Debug "--"
EndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: HRESULT auswerten

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: HRESULT auswerten

Beitrag von ts-soft »

Code: Alles auswählen

Macro LoWord(long)
  long & $FFFF
EndMacro


test.l = -2146827838
Debug LoWord(test)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: HRESULT auswerten

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: HRESULT auswerten

Beitrag 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 !
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: HRESULT auswerten

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: HRESULT auswerten

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: HRESULT auswerten

Beitrag 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
Antworten