Delphi 11.2.3: Где в Delphi находится функция VarType ()? - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь преобразовать код 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

Это не в этом устройстве. Кроме того, я не могу найти варианты блока, только вариант блока. Однако, используя вариант модуля, я получаю ошибку во время выполнения: необходима запись, объект или тип класса. Так что это не работает.

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

Во всяком случае, я не нахожу varType в System.variant. Вариантов больше не существует?

Кто-нибудь может мне помочь ??

1 Ответ

0 голосов
/ 05 сентября 2018

Документация, на которую вы ссылаетесь, довольно старая. Это для Delphi 2009, который предшествовал введению Имен областей применения . Но даже в этой старой документации VarType() задокументировано как находящийся в единице Variants (а не в единице Variant, которой не существует).

Имена областей применения, такие как System, были добавлены к именам модулей RTL / VCL в XE2 (таким образом, единица Variants стала System.Variants).

Более новый DocWiki от Embarcadero, который заменяет старый сайт Docs, ясно показывает, что функция VarType() действительно находится в System.Variants модуле .

Убедитесь, что либо:

  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;
...