Еще один новый недокументированный тип

Если кто помнит, в предыдущем письме а писал, что в Кларе «обнаружился» новый тип переменной размером в 16 байт. Так вот, компилятору этот тип известен под именем VARIANT. Не знаю, есть ли он в предыдущих версиях, но в С5 уже есть.

NewVar  VARIANT

Он представляет собой, если можно так сказать, симбиоз двух типов — ANY и BSTRING. Позволяет присваивать любые значения. При этом строки хранит, как и BSTRING, в юникоде. При присваивании чисел не преобразует их в строку, как BSTRING, а хранит, как и ANY, в числовом виде. Надо иметь ввиду, что переменные типа ULONG предварительно преобразуются в REAL. Также преобразуются в REAL и DECIMAL-переменные. Заметьте, что при этом будут утеряны дробные разряды старше 15-го. При обратном присваивании числовым переменным значение из VARIANT всегда преобразуется в REAL. В этом плане поведение аналогично ANY-переменным.

Но, в отличии от ANY, не позволяет присваивать рефералы на переменные. Хотя компилятор генерит необходимый для этого код с привлечением функций ядра по работе с типом VARIANT. Так что, очевидно, существуют особые ситуации, когда такое присваивание возможно. Или в данной версии еще не полностью проработан данный тип.

Надо заметить, что в некоторых случаях для работы с переменными этого типа используются функции из OLE-библиотеки. Так что, возможно, этот тип и предназначен, в основном, для работы с OLE-обьектами.

Вот, в принципе, и все о новом типе.

Кстати!
У файла также «обнаружился» новый атрибут — CDROM. Драйвер его опознает, но что он означает — обнаружить не удалось. Но точно не READONLY, как можно было бы предположить!