AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ULONG Typ in Delphi als Cardinal definiert!?
Thema durchsuchen
Ansicht
Themen-Optionen

ULONG Typ in Delphi als Cardinal definiert!?

Ein Thema von richard_boderich · begonnen am 6. Dez 2007 · letzter Beitrag vom 19. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 13:36
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!?

Cardinal 0..4294967295 32 Bit, ohne Vorzeichen Die MSDN sagt zum ULONG Typ
ulong 0 to 18,446,744,073,709,551,615 Unsigned 64-bit integer Ich vermute, das Problem was ich habe ist, das Aufgrund der unterschiedlichen Typen Cardinal und ULONG und ihrer Bytelängen
die Recordabfrage mit den Feldern nicht mehr richtig funktioniert. z.B wenn name=foobar und Länge=10, dann sowas raus
Delphi-Quellcode:
@myinformation.name -> "bar"
@myinformation.Länge -> "foobar??" !!!!
Problem:
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
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 13:49
Ich würde eher int64 nehmen
Markus Kinzler
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 14:02
Hi,
wie genau gibst Du denn die Länge aus, wenn da ein String rauskommt?

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 14:03
Zitat von richard_boderich:
Die MSDN sagt zum ULONG Typ
ulong 0 to 18,446,744,073,709,551,615 Unsigned 64-bit integer
Wirklich oder doch nur wenn als Zielplattform Win64 genommen wird?
Ok, unter .NET ist ULONG immer 64-Bit.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#5

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 14:07
@ 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
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 14:10
Zitat von richard_boderich:
@ Der Unwissende

Die Strucktur wird von der Api Funktion ausgefüllt. Ich will nur auslesen.
Das ist klar, aber Du sagst ja die Belegung der Längeninformation ist ein String, der z.B. Foobar enthält. Wie also ermittelst Du die Belegung? Und was bekommst Du, wenn Du das Feld per IntToStr ausgibst?

Zitat von richard_boderich:
Werde es erstmal mit Int64 probieren, obwohl das ja "signed" ist.
Gut, wenn ein String mehr als 4,2 Mrd. Zeichen enthält ist ohnehin schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#7

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 14:21
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
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 14:23
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 6. Dez 2007, 14:24
Das Feld muss auch 64Bit breit sein, also int64
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#10

Re: ULONG Typ in Delphi als Cardinal definiert!?

  Alt 7. Dez 2007, 16:32
eigentlich ist doch ulong ein LongWord

LONG ist jedenfalls LongInt
also sollte ULONG doch LongWord sein?

demnach ULONGLONG = UInt64?




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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz