![]() |
ULONG Typ in Delphi als Cardinal definiert!?
Moin,
Ich habe Probleme beim Auswerten einer Record Strucktur, die ich von einer WinAPI erhalte, welche mir einen Pointer darauf liefert. Diese sieht folgendermaßen aus.
Delphi-Quellcode:
TMyInformation = packed record
zeitwert: Int64; zähler: ULONG; Länge: ULONG; Name: WChar; end; In Delphi ist der ULONG Typ als Cardinal definiert!?
Delphi-Quellcode:
Die MSDN sagt zum ULONG Typ
Cardinal 0..4294967295 32 Bit, ohne Vorzeichen
Delphi-Quellcode:
Ich vermute, das Problem was ich habe ist, das Aufgrund der unterschiedlichen Typen Cardinal und ULONG und ihrer Bytelängen
ulong 0 to 18,446,744,073,709,551,615 Unsigned 64-bit integer
die Recordabfrage mit den Feldern nicht mehr richtig funktioniert. z.B wenn name=foobar und Länge=10, dann sowas raus
Delphi-Quellcode:
Problem:
@myinformation.name -> "bar"
@myinformation.Länge -> "foobar??" !!!! 1. Wenn ich nach dem Namen frage bekomme ich nur einen Teilstring. 2. Wenn ich nach der Länge frage bekomme ich den ganzen String + paar Byte dazu, dabei sollte Länge ein Cardinal mit der Länge von Name sein. Vielleicht kann mir jemand sagen, ob meine Vermutung zutrifft und es wirklich an den Typen liegt, oder was ich da sonst falsch mache. *seufz* mfG Richard |
Re: ULONG Typ in Delphi als Cardinal definiert!?
Ich würde eher int64 nehmen
|
Re: ULONG Typ in Delphi als Cardinal definiert!?
Hi,
wie genau gibst Du denn die Länge aus, wenn da ein String rauskommt? Gruß Der Unwissende |
Re: ULONG Typ in Delphi als Cardinal definiert!?
Zitat:
Ok, unter .NET ist ULONG immer 64-Bit. |
Re: ULONG Typ in Delphi als Cardinal definiert!?
@ Der Unwissende
Die Strucktur wird von der Api Funktion ausgefüllt. Ich will nur auslesen. Werde es erstmal mit Int64 probieren, obwohl das ja "signed" ist. mfg Richard |
Re: ULONG Typ in Delphi als Cardinal definiert!?
Zitat:
Zitat:
|
Re: ULONG Typ in Delphi als Cardinal definiert!?
Also das funktioniert erstmal teilweise
TMyInformation = packed record zeitwert: Int64; zähler: word; < statt ulong Länge: word; < stat ulong Name: WChar; end; wenn ich es so mach, dann bekomme ich wenn ich .name abfrage den vollen string. leider gibt er mir dan als länge 0 aus. versteh ich einfach nicht. Die APi funktioniert doch. Fehlerstatus ist ok und Resultlength ist 30. Also wird doch was zurueckgegeben. Der Name stimmt doch auch. @ Unwissender Namelängth = 0 , das heisst die Strucktur kann noch nicht stimmen. Habe ich per Breakpoint ermittelt Gruß Richard |
Re: ULONG Typ in Delphi als Cardinal definiert!?
Ok, dann noch anders, kannst Du vielleicht kurz die Struktur verlinken, die Du hier in Delphi abbilden möchtest? Vielleicht kann man dann leichter den potentiellen Fehler ermitteln.
|
Re: ULONG Typ in Delphi als Cardinal definiert!?
Das Feld muss auch 64Bit breit sein, also int64
|
Re: ULONG Typ in Delphi als Cardinal definiert!?
eigentlich ist doch ulong ein LongWord :gruebel:
LONG ist jedenfalls LongInt also sollte ULONG doch LongWord sein? demnach ULONGLONG = UInt64? :gruebel: Nja wie dem auch sei unsigned 64 bit integer = UInt64 (gibt's erst seit D6 und vorher muß man Int64 mißbrauchen) [add] PS: in Windows.pas steht übrigens auch LONGLONG = Int64; und das hat sich doch Borland aus den Windows-PSDK-Headern übersetzt :angel2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz