Вариантные значения. Ранее рассмотренный тип Record имеет вариантную
часть записи, где в одном фрагменте памяти хранится информация нескольких
типов. Возникает необходимость иметь в памяти действительное значение с
фиксированной запятой, которое может интерпретироваться, как целое.
Переменным типа Variant можно присваивать значения типов – целое,
действительное, строковое и булевое. Для совместимости с другими ЯП
предусмотрена возможность присвоения их переменным значения даты/времени и
объектов типа OLE Automation. Кроме того, вариантные переменные могут
содержать массивы переменной длины и размерности с элементами указанных
типов.
Все целые, действительные, строковые, символьные и булевы типы совместимы
с типом Variant в случае операции присваивания. Вариантные переменные могут
сочетаться в выражениях с целыми, действительными, строковыми, символьными и
булевыми переменными; при этом все необходимые преобразования в системе
Delphi выполняет автоматически. Можно произвольно задавать выражение типа
Variant в форме Variant (X).
В следующей таблице перечислены типы значении, которые можно
присваивать вариантным переменным, и вариантные типы результата.
Тип выражения Вариантный тип
Целый varlnteger
Действительный, кроме Currency varDouble
Currency varCurrency
Строковый и символьный varString
Булев varBoolean
Вариантные переменные в отношении операции присвоения совместимы с
элементарными типами данных Object Pascal (Integer, Real, String и Boolean). Все
необходимые преобразования в системе Delphi выполняются автоматически. Если
необходимо указать, что вариантное значение интерпретируется как целое,
действительное, строковое или булево, следует задать тип в форме TypeName (V),
где TypeName – идентификатор соответствующего типа, V– выражение Variant.
Задание типа изменяет способ считывания значения из вариантной переменной, а
не само значение. Внутреннее представление изменяется с помощью процедур
VarAsType и VarCast.
OLE Automation. Вариантные переменные удобно применять для изменения
свойств объектов OLE Automation и вызова методов этого объекта. Чтобы
инициировать эту возможность, подключают модуль OleAuto.
Синтаксис вызова метода или обращения к свойству объекта OLE Automation
такой же, как вызов из созданного класса. Имеется несколько отличий. Во-первых,
вызов метода объекта OLE Automation происходит по схеме позднего связывания,
т.е. компилятор не проверяет, существует ли данный метод и правильно ли
определены типы параметров. Для компилятора приемлем любой идентификатор
метода и любое число параметров разных типов. При выполнении вызванного
таким образом метода может произойти ошибка.
Пример описания фактариала числа в Программе1 в языке Pascal, в
Программе2 в языке Delphi и модуля интерфейса Unit1 демонстрирует принципы
взаимодействия разноязыковых программ. В этих программах используются типы