![]() |
unsigned int in delphi ?
Hi ho,
ich bastel gerade ne Headerdatei aus c in delphi um. Problem ist ein datentyp ist im c header ... unsigned int .. welchem Delphityp entspricht das ? unsigned long scheint cardinal zu sein ... nur bei int ? mfg Andy |
Re: unsigned int in delphi ?
Word ist ein 16-Bit Unsigned Integer.
|
Re: unsigned int in delphi ?
oh ;-) Danke dir.
|
Re: unsigned int in delphi ?
UINT, kann man in C auch schreiben.
|
Re: unsigned int in delphi ?
unsigned long ist LongWord ... Cardinal hat keine feste Länge ... in Delphi 1 war es noch 16 Bit, da D1 16-Bit-Programme erstellte ... aktuell ist es 32 Bit, da wir ja 32-Bit-Programme erstellen und bald ist es 64 Bit ... steht aber auch in der OH :warn:
|
Re: unsigned int in delphi ?
ich zitiere mal aus dem C9X-standard:
Zitat:
es ist also lediglich sichergestellt daß "int" in C mindestens diesen zahlenbereich speichern kann. gleiches gilt für "unsigned int" wobei gilt: UINT_MAX = 65535. auch hier wird nur festgeschrieben daß der datentyp diese zahl speichern können muss. eine vollkommen legale übersetzung nach Delphi wären also genauso gut die Delphi-typen "Integer", "Cardinal" oder "Int64". es macht keinerlei unterschied denn alle diese typen können die zahl 65535 eindeutig speichern. das hier vorgeschlagene "Word" ist lediglich der kleinste datentyp der die anforderungen "gerade so" noch erfüllt. der standard schlägt vor daß der datentyp int an die architektur angepasst werden soll. hier musst du also das handbuch deines compilers dazu befragen wie groß bei ihm "unsigned int" ist. normalerweise wäre es auch einer IA32 32bit. dann wäre eine korrekte übersetzung "LongWord". und wenn du dich später dazu entschließt einen anderen C-compiler für deinen objektcode (du willst ja anscheinend nur den header übersetzen) zu nehmen wirst du erneut nachschauen müssen wie groß "unsigned int" auf dem neuen compiler ist. |
Re: unsigned int in delphi ?
Danke für deine ausführlich Antwort. Klingt logisch. Problem ist nur, dass ich nicht weiß mit welchen compiler oder auf welchem system/Plattform dieser c source code compiliert wird. Geht halt darum das ich eine dll ansprechen will und einige Konstanten und datentypen konvertieren muss.
mfg Andy |
Re: unsigned int in delphi ?
Zitat:
jetzt müsste dir nur noch einer sagen was sizeof(unsigned int) beim Borland C++ Compiler, beim Microsoft Visual C++ Compiler und beim Intel C++ Compiler ergibt. wenn du glück hast sind die zahlen gleich und du hast eine (einigermaßen) zuverlässige aussage über die größe. wenn es eine DLL ist die aus einem opensource-projekt stammt wäre der GCC aus Ming/W oder Cygwin noch denkbar. bei mir unter Linux haben sowohl der GCC (C) als auch der G++ (C++) für den datentyp "unsigned int" 32 bit. ich nehme stark an daß das unter Windows genauso ist. |
Re: unsigned int in delphi ?
es handelt sich bei den header dateien um c dateien aus dem open source code von MySQL. Denke das niemand ersthaft diesen source über cygwin compilieren will :) Würde dann auch zu den 32bit tendieren da es unter linux wie du meinst ja der fall ist.
mfg Andy |
Re: unsigned int in delphi ?
Und da wir aktuell eh vorwiegend mit 32-Bit-Programmen zu tun haben, ist die Annahme, daß es sich um 32-Bit, also um LongWord handelt schon OK.
Ansonsten nimm halt Cardinal und wenn beide Dateien (dein Programm und die DLL) mit 'nem 32-Bitr-Compiler kompiliert werden stimmt es auch wieder. Und genau um solchen Problemen entgegenzuwirken, arbeite ich möglichst nicht mit Integer/Cardinal/Boolean... (also den systemabhängigen Datentypen) :???: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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