Seite 1 von 1

Unsigned-Problematik beim Einbinden einer C++-Lib

Verfasst: 12.08.2017 04:06
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?

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

Verfasst: 12.08.2017 08:31
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

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

Verfasst: 12.08.2017 22:41
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. :(

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

Verfasst: 12.08.2017 22:43
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)