[英]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.