Unsigned-Problematik beim Einbinden einer C++-Lib

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Unsigned-Problematik beim Einbinden einer C++-Lib

Beitrag von X0r »

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?
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Unsigned-Problematik beim Einbinden einer C++-Lib

Beitrag von GPI »

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:

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)
Wenn du keine Multiplikation, Division oder größenvergleiche benutzt, hast du auch keine Probleme

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!
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Re: Unsigned-Problematik beim Einbinden einer C++-Lib

Beitrag von X0r »

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. :(
Benutzeravatar
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

Beitrag von NicTheQuick »

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)
Bild
Antworten