eine C-Funktion hat einen Parameter vom Typ uint32_t * (ptr auf unsigned integer, 32 bit)
Wenn jetzt der Wert, den ich auslesen will, größer als 2147483647 ist (lese mit PeekI aus), dann erhalte ich einen negativen Wert (Klar.)
Um jetzt aber den wahren Wert zu erhalten, haben ich mir folgenden Weg ausgedacht:
Bsp:
Code: Alles auswählen
EnableExplicit
Define a.i = 2147483647+10
Define b.q
Define v.s
Debug a
Debug RSet(Bin(PeekI(@a),#PB_Long), 32, "0")
v.s = "%" + RSet(Bin(PeekI(@a),#PB_Long), 32, "0")
Debug v
b = Val(v)
Debug b
Code: Alles auswählen
Procedure.q wrapfunc ( *p ) ; Die C-Funktion hat analog uint32_t *ptr
ProcedureReturn Val("%" + RSet(Bin(PeekI(*p),#PB_Long), 32, "0"))
EndProcedure
Viele Grüße
Stevie63
Ich vergaß: Hab's unter x86 getestet, unter x64 sollte ich PeekL statt PeekI nehmen. Evtl muß auch noch überprüft werden, ob der ausgelesene Wert negativ oder positiv ist. Bei positiv kann ich mir ja die Konvertiererei sparen.