繁体   English   中英

Delphi 2007和XE2:使用NativeInt

[英]Delphi 2007 and XE2: Using NativeInt

自Delphi XE2以来,NativeInt具有新的含义。 在32位运行时,NativeInt是32位整数。 在64位运行时,NativeInt是64位整数。

我有一些使用第三方DLL(32位和64位)的源文件。 这些DLL分别在32和64平台上使用32位和64位整数。

这些源文件在Delphi 2007 - Delphi XE2 32位平台上运行时没有问题:

例如:

function Test: Integer;

当我尝试将这些源文件迁移到Delphi XE2 64位平台时,上述功能不再有效,因为它需要64位整数。 为了使源可以同时适用于32/64平台,我改为

function Test: NativeInt;

它有效。

但是,声明在Delphi 2007中不起作用,因为Delphi 2007将NativeInt视为64位整数:SizeOf(NativeInt)= 8

我可以通过使用条件指令RtlVersion或CompilerVersion来解决问题

function Test: {$if CompilerVersion<=18.5}Integer{$else}NativeInt{$ifend};

但由于源文件中有许多声明,这将是乏味的。

有没有更好的方法使源文件在Delphi 2007-XE2 win32和XE2 win64平台上运行?

更好的选择是重新声明NativeInt类型本身:

{$if CompilerVersion<=18.5}
type
  NativeInt = Integer;
{$ifend}

它应该每个单元执行一次,并且可以作为通用* .inc文件的一部分实现。

Gee:为什么不直接使用LongInt(需要32位)和Int64(否则)?

只要使用“整数”哪里无所谓?

使用“NativeInt”似乎是违反直觉的,你知道它在不同的时间意味着不同的东西......

PS:您可以随时定义自己的OWN,自定义类型和$ ifdef!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM