【问题标题】:System.IntNN, System.UIntNN version requirementsSystem.IntNN、System.UIntNN 版本要求
【发布时间】:2011-09-08 11:41:54
【问题描述】:

第一个在系统单元中声明Int8Int16Int32UInt8UInt16UInt32 的 Delphi 版本是什么。

我需要使用哪个VERnnn 条件符号或RTLVersion 值进行检测?

【问题讨论】:

  • 我认为它一定是非常非常新的。他们在为这些类型提供可用名称方面确实拖了后腿。如果这些名字出现在 Delphi 2007 中,我从来没有遇到过。
  • 我不知道你在说什么。街道名称?最初的问题只是说我根本不明白的 IntNN。
  • @user 我认为您对编辑的评论应该针对约翰。我只将 IntNN/UIntNN 更改为特定版本。
  • @user759588:我已经做到了。
  • @user Johan 是一位高级用户,他完全有权进行此类编辑。如果您想恢复,那也是您的权利。这是一个维基。

标签: delphi compatibility


【解决方案1】:

我不知道你的问题的答案。但是,您可以通过在全局包含文件或代码中所有其他单元使用的单元中使用这样的代码来避免需要知道:

{$IF Declared(System.Int8)}
{$ELSE}
type
  Int8   = ShortInt;
  Int16  = SmallInt;
  Int32  = Integer;//or Longint if you prefer
  UInt8  = Byte;
  UInt16 = Word;
  UInt32 = Cardinal;//likewise for Longword
{$IFEND}

【讨论】:

  • @David,谢谢。我以前没有见过Declared,实际上不得不将您的代码复制/粘贴到项目中并编译它以相信它有效。 :) +1。 (顺便说一句,我什至在$IF/$ELSE 之间添加了{$MESSAGE 'Declared worked'} 以确保。)不过,这又带来了另一个问题——Declared 是什么时候添加的?
  • @Ken White,D6(检查 VER140 或 CONDITIONALEXPRESSIONS)
  • 特征检测而不是版本嗅探,好主意,应该也可以。
  • @Ken 肯定出现在 D6 中,我有一种感觉,那就是它被引入的时候。
  • @user 整数也是如此。如果您愿意,请使用 Longint 和 Longword。值得一提的是,即使在 Delphi 64 中,Integer 和 Cardinal 也是 32 位的。上面的声明直接取自 System.pas。
【解决方案2】:

我只知道这些类型别名是在 Delphi 2009 中声明的,如果这是它们首次出现的版本,我不会感到惊讶。

【讨论】:

  • 有人确定他们是在 D2007 中引入的吗?
  • 是的,正如 Joe White 指出的那样,D2007 缺少这些类型,所以 - D2009。谢谢! (更正:至少在系统单位)
猜你喜欢
  • 2020-11-17
  • 2020-12-28
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
相关资源
最近更新 更多