Delphi 11.2.3:在Delphi中,函数VarType()在哪里?

时间:2018-09-05 15:35:24

标签: variant delphi-10.2-tokyo

我正在尝试将Delphi2005代码转换为Delphi Tokyo 10.2.3代码。 不再识别功能VarType。 我需要函数VarType来确定变量的基本类型。通常,根据许多帖子,我发现它应该在System.variants单元中。但是,如果我搜索例如在:

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/!!FUNCTIONS_System.html

它不在本机中。此外,我找不到单位变体,只有单位变体。 但是,使用unit变量会出现运行时错误:记录,对象或类类型是必需的。所以这行不通。

if (System.Variant.VarType(Value)  and varTypeMask) =         
System.Variant.varString  then  // VarType(Value) unbekannt
      begin
TByte8Array(PRecFORMULA3(PBuf).Value)[0] := 0;
end;

无论如何,我在System.variant中找不到varType。变体了吗?

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您链接到的文档很旧。它是针对Delphi 2009的,它早于Unit Scope Names的引入。但是即使在旧的文档中,VarType() is documented as being in the Variants unit(不在Variant单元中,该单元也不存在)。

单位作用域名称,例如System,已添加到XE2中的RTL / VCL单位名称中(因此Variants单位变为System.Variants)。

Embarcadero的较新DocWiki(取代了旧的Docs网站)清楚地显示了VarType() function is indeed located in the System.Variants unit

请确保:

  1. 您的System.Variants子句中有uses

    uses
      ..., System.Variants;
    
  2. 您在项目的单位作用域名称列表中有System,然后可以在Variants子句中使用uses

    uses
      ..., Variants;
    

无论哪种方式,您都可以按预期使用VarType(),而不必完全限定它:

if (VarType(Value) and varTypeMask) = varString then
begin
  TByte8Array(PRecFORMULA3(PBuf).Value)[0] := 0;
end;