<div dir="ltr">2017-04-06 18:50 GMT-03:00 Mattias Gaertner <span dir="ltr"><<a href="mailto:nc-gaertnma@netcologne.de" target="_blank">nc-gaertnma@netcologne.de</a>></span>:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">
</span>Why do you think that Delphi's longint has 64bits anywhere?<br>
Delphi's NativeInt is 32 or 64bit depending on platform.<br>
<span class="gmail-"><br></span></blockquote><div><br><a href="http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Internal_Data_Formats_(Delphi)#Platform-Independent_Signed_Integer_Types">http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Internal_Data_Formats_(Delphi)#Platform-Independent_Signed_Integer_Types</a>.<br></div><div>As Marco have pointed out, in Windows the Delphi's LongInt type is always 32-bits. On other platforms is platform dependent.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">
<br>
> The documentation says "every platform has a ”native” integer size,<br>
> depending on whether the platform is 8-bit, 16-bit, 32-bit or 64-bit. e.g.<br>
> On AVR this is 8-bit. ", but it is not clear about which integer types are<br>
> "natives".<br>
<br>
</span>Most of FPC's integer types defined via IFDFEs. See<br>
fpc/rtl/inc/systemh.inc<br>
You can use Lazarus' Find Declaration on any type and see the<br>
definition.<br>
For example:<br>
<br>
{$ifdef CPU64}<br>
  SizeInt = Int64;<br>
  SizeUInt = QWord;<br>
  PtrInt = Int64;<br>
  PtrUInt = QWord;<br>
  ValSInt = int64;<br>
  ValUInt = qword;<br>
  CodePointer = Pointer;<br>
  CodePtrInt = PtrInt;<br>
  CodePtrUInt = PtrUInt;<br>
{$endif CPU64}<br>
<br>
{$ifdef CPU32}<br>
  SizeInt = Longint;<br>
  SizeUInt = DWord;<br>
  PtrInt = Longint;<br>
  PtrUInt = DWord;<br>
  ValSInt = Longint;<br>
  ValUInt = Cardinal;<br>
  CodePointer = Pointer;<br>
  CodePtrInt = PtrInt;<br>
  CodePtrUInt = PtrUInt;<br>
{$endif CPU32}<br>
<br>
<br>
  { NativeInt and NativeUInt are Delphi compatibility types. Even though Delphi<br>
    has IntPtr and UIntPtr, the Delphi documentation for NativeInt states that<br>
    'The size of NativeInt is equivalent to the size of the pointer on the<br>
    current platform'. Because of the misleading names, these types shouldn't be<br>
    used in the FPC RTL. Note that on i8086 their size changes between 16-bit<br>
    and 32-bit according to the memory model, so they're not really a 'native<br>
    int' type there at all. }<br></blockquote><div><br></div></div>Still not clear for me. Are NativeInt and NativeUInt provided for Delphi compatibility, right? So, if i need an integer type which depends on platform/fpc compilation mode, which one should i use?<br></div></div>