Moin,
ich bin derzeit dabei, eine in C++ geschriebene Bibliothek als DLL in PureBasc zu benutzen. Die Funktionen der Bibliothek weisen aber zahlreiche unsigned Datentypen auf (unsigned long, int, ...) - sowohl bei Parametern als auch bei Rückgabewerten.
Wie geht man damit in PureBasic korrekt um?
Unsigned-Problematik beim Einbinden einer C++-Lib
Re: Unsigned-Problematik beim Einbinden einer C++-Lib
Mit Unicode und ASCII gibts ja zwei Vorzeichenlose Variablentypen. Leider hat man es versäumt, gleich für Long und Quad entsprechende einzurichten.
Für LONG kann man einfach in den nächsten größeren Datenbereich ausweichen. PB schmeißt ja keine Fehlermeldungen, wenn es einen Überlauf gibt, das kann man hier ausnutzen:
Wenn du keine Multiplikation, Division oder größenvergleiche benutzt, hast du auch keine Probleme
Für LONG kann man einfach in den nächsten größeren Datenbereich ausweichen. PB schmeißt ja keine Fehlermeldungen, wenn es einen Überlauf gibt, das kann man hier ausnutzen:
Code: Alles auswählen
Procedure Scan(*adr)
Debug "scan:"+PeekA(*adr)+" "+PeekA(*adr+1)+" "+PeekA(*adr+2)+" "+PeekA(*adr+3)
EndProcedure
quad.q=$ef1f2f3f
scan(@quad)
long.l=quad
Debug long
scan(@long)
newquad.q=long & $ffffffff
Debug Hex(newquad)
scan(@newquad)
Code: Alles auswählen
long.l=$7fffffff
For i=1 To 10
Debug "S:"+long+" U:"+Str(long & $ffffffff)
long+1
Next
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: Unsigned-Problematik beim Einbinden einer C++-Lib
Moin,
danke erst mal für die Info. Das war auch meine erste Annahme, wobei mein Header in PureBasic dadurch unsauber wird.
Ein weiteres Problem: was mache ich aus einem unsigned __int64?
Das ist dann wohl in PureBasic nicht darzustellen.
danke erst mal für die Info. Das war auch meine erste Annahme, wobei mein Header in PureBasic dadurch unsauber wird.
Ein weiteres Problem: was mache ich aus einem unsigned __int64?
Das ist dann wohl in PureBasic nicht darzustellen.
- NicTheQuick
- Ein Admin
- Beiträge: 8675
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Unsigned-Problematik beim Einbinden einer C++-Lib
Darstellen geht schon, nur damit rechnen ist schwieriger. Plus, Minus ist alles kein Problem. Zum Multiplizieren, Dividieren und Modulo brauchst du dann vermutlich Inline-Assembler.
Code: Alles auswählen
q.q = -1
Debug StrU(q, #PB_Quad)