Delphi 10.2.3: где в Delphi функция VarType ()?

Я пытаюсь преобразовать код 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. Вариантов больше не существует?

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


person Thommy 7571    schedule 05.09.2018    source источник
comment
Очень запутанный. Вы ссылаетесь на документацию по Delphi 2009, которую вы точно не используете. Вы имеете в виду Delphi 11, которого не существует. Вы помечаете вопрос XE (версия между 2010 и XE2), который, опять же, я не думаю, что вы используете. Нет модуля RTL с именем System.Variant. Здесь требуется немного больше внимания. Детали имеют значение, и важно знать, какое программное обеспечение вы используете.   -  person David Heffernan    schedule 05.09.2018
comment
Здравствуйте, большое спасибо за ваш комментарий. Извините, это Delphi 10, и я подумал, что проблема должна быть такой же для XE-версии Delphi. Я не видел, чтобы ссылка была на Delphi2009, и просто поинтересовался, почему существует одна домашняя страница с таким количеством записей и без возможности (видимой для меня) отличить, к какой версии Delphi она принадлежит, например фильтром или чем-то вроде этого, если они такие разные   -  person Thommy 7571    schedule 06.09.2018
comment
Измените вопрос, чтобы решить все эти проблемы. Спасибо.   -  person David Heffernan    schedule 06.09.2018


Ответы (1)


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

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

Более новый DocWiki Embarcadero, который заменяет старый сайт Документов, ясно показывает, что функция 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;
person Remy Lebeau    schedule 05.09.2018
comment
Здравствуйте, спасибо за ответ, в деле вы правы. Первоначально в списке использования была система System, но, поскольку она требовалась для решения особой задачи, я указал System.UITypes. Я не видел, чтобы он использовался и для других методов. Кроме того, в списке использования были варианты, но они были указаны только для версии 5.0 Delphi ... Наконец, когда я набрал System.variants. до varTypes мне сказали, что в System нет вариантов модулей. У меня не было ошибок только во время разработки, используя вариант .. Так что я был сбит с толку. После удаления варианта версии (5.0) он скомпилирован !! - person Thommy 7571; 06.09.2018
comment
кстати, должен ли метод, присутствующий в System.SysUtils, не быть найден, если я использую System? Похоже, что это не так ... - person Thommy 7571; 06.09.2018
comment
@ Thommy7571 System, System.SysUtils, System.Variants, это разные юниты. Вы не можете использовать что-то из модуля, если этот модуль не указан в предложении uses (модуль System является неявным). Недостаточно указать только System. И также есть разница между фактическим System модулем и именем области System модуля. - person Remy Lebeau; 06.09.2018