Jump to content

Тип варианта (COM)

Вариант — это тип данных в некоторых языках программирования, в частности Visual Basic , OCaml , [1] Delphi и C++ при использовании объектной модели компонентов . Это реализация одноименной концепции в информатике .

В Visual Basic (и Visual Basic для приложений ) тип данных Variant представляет собой объединение тегов , которое можно использовать для представления любого другого типа данных (например, целого числа , с плавающей запятой , одинарной и двойной точности, объекта и т. д.). кроме строкового типа фиксированной длины. В Visual Basic любая переменная, не объявленная явно или тип которой не объявлен явно, считается вариантом.

Хотя использование не объявленных явно вариантов не рекомендуется, их можно использовать, когда необходимый тип данных может быть известен только во время выполнения, когда ожидается, что тип данных будет меняться, или когда желательны дополнительные параметры и массивы параметров. Фактически, в языках с динамической системой типов является вариант часто единственным доступным типом переменных .

Среди основных изменений в Visual Basic .NET , являющемся языком .NET, тип варианта был заменен типом объекта .NET . Есть сходства в концепциях, но есть и существенные различия, и между этими двумя типами не существует прямых преобразований. Для преобразований, которые могут потребоваться, если код Visual Basic .NET взаимодействует с COM-объектом Visual Basic 6, обычно используется метод маршалинга .NET .

В Visual Basic вариант с именем A может быть объявлен явно или неявно:

Dim A
Dim A as Variant

В Delphi вариант с именем A объявляется следующим образом:

var A: variant;

Переменной типа варианта, для краткости называемой «вариантом», как определено в Visual Basic, требуется 16 байт памяти, и ее структура выглядит следующим образом:

Компенсировать Размер Описание
0 2 Значение, возвращаемое VarType; указывает, какие данные содержит вариант.
2 6 Зарезервированные байты; используется только для типа VT_DECIMAL.
8 до 8 Данные, которые содержит вариант.

Ниже приведены несколько примеров вариантов, которые можно встретить в Visual Basic. В других языках могут использоваться и другие варианты.

ВарТип Шестигранник Пропвариантный тип Пропвариантный член ТипИмя Байты данных Тип C и C++
0 0x00 VT_EMPTY Никто Пустой 1
1 0x01 VT_NULL Никто Нулевой 2
2 0x02 VT_I2 iVal Целое число 2А00 КОРОТКИЙ
3 0x03 VT_I4 лВал Длинный 2A000000 ДЛИННЫЙ
4 0x04 VT_R4 fltSelect Одинокий 00002842 ПЛАВАТЬ
5 0x05 VT_R8 дблВал Двойной 0000000000004540 ДВОЙНОЙ
6 0x06 VT_CY сивал Валюта А068060000000000 Структура CY
7 0x07 VT_DATE дата Дата 00000000C0D5E140 ДАТА (двойная)
8 0x08 VT_BSTR бстрвал Нить хххххххх (BSTR):(OLECHAR *):(WCHAR *):( wchar_t *)
9 0x09 VT_DISPATCH pdispVal
10 0x0a VT_ERROR код Ошибка 2А000А80 ЧРЕЗУЛЬТАТ (длинное целое число)
11 0x0b VT_BOOL boolVal логическое значение ФФФФ VARIANT_BOOL (короткий)
12 0x0c VT_VARIANT pvarVal Вариант ВАРИАНТ
13 0x0d VT_UNKNOWN точкаВал Ничего 4 00000000 IНеизвестно *
14 0x0e VT_DECIMAL деквал ДЕСЯТИЧНАЯ
16 0x10 VT_I1 cVal Байт ЧАР
17 0x11 VT_UI1 бвал Байт БАЙТ (беззнаковый символ)
18 0x12 VT_UI2 уивал СЛОВО (беззнаковое короткое)
19 0x13 VT_UI4 УЛЬВАЛ DWORD (беззнаковое целое)
20 0x14 VT_I8 кит
21 0x15 VT_UI8 ухВал
22 0x16 VT_INT intSelect
23 0x17 VT_UINT uintVal
24 0x18 VT_VOID
25 0x19 VT_HRESULT Отсутствующий 3 80020004 ЧРЕЗУЛЬТАТ (длинное целое число)
26 0x1a VT_PTR
27 0x1b VT_SAFEARRAY парировать
28 0x1c VT_CARRAY
29 0x1d VT_USERDEFINED
30 0x1е VT_LPSTR с псз
31 0x1f VT_LPWSTR pwszVal
36 0x24 VT_RECORD
37 0x25 VT_INT_PTR пинтувал
38 0x26 VT_UINT_PTR пунтВал
8192 0x2000 VT_ARRAY парировать
9 Ссылка на объект 5 хххххххх IНеизвестно *
  • 1 Тип неинициализированного варианта.
  • 2 Тип значения NULL в базе данных, то есть не инициализированный и не эквивалентный нулевому указателю C++ .
  • 3 Отсутствующие аргументы на самом деле представляют собой определенное значение ошибки под названием «параметр не найден».
  • 4 Тип объекта имеет нулевую ссылку.
  • 5 TypeName вернет имя класса содержащегося объекта. Данные будут указателем интерфейса , то есть указателем на указатель на таблицу виртуальных методов (которая представляет собой массив указателей функций).

Обычное использование

[ редактировать ]

Коллекции

[ редактировать ]

The Collection Класс в OLE Automation может хранить элементы разных типов данных. Поскольку тип данных этих элементов не может быть известен во время компиляции, методы для добавления элементов в коллекцию и получения элементов из коллекции используют варианты. Если в Visual Basic For Each используется конструкция, переменная итератора должна иметь тип объекта или его вариант.

Отправка вызовов методов

[ редактировать ]

В OLE-автоматизации IDispatch Интерфейс используется, когда класс объекта не может быть известен заранее. Следовательно, при вызове метода такого объекта типы аргументов и возвращаемое значение неизвестны во время компиляции. Аргументы передаются как массив вариантов, и когда вызов завершается, возвращается вариант.

Дополнительные параметры

[ редактировать ]

В Visual Basic аргумент процедуры можно объявить необязательным, добавив к нему префикс Optional ключевое слово. Если аргумент опущен, Visual Basic передает в процедуру специальное значение, называемое Missing в таблице выше, указывающее, что аргумент отсутствует. Поскольку значение может быть либо предоставленным значением, либо специальным значением, необходимо использовать вариант.

Function GetText(Optional ByVal Index) As String
    If IsMissing(Index) Then
        GetText = Item(CurrentItem)
    Else
        GetText = Item(Index)
    End If
End Function

Аналогично ключевое слово ParamArray может использоваться для передачи всех следующих аргументов в массиве вариантов.

См. также

[ редактировать ]
  1. ^ «Глава 6. Варианты/Real World OCaml» . v1.realworldocaml.org . Архивировано из оригинала 8 мая 2019 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d9881a9fe14883b1f9af6faa4bd4f1de__1687405020
URL1:https://arc.ask3.ru/arc/aa/d9/de/d9881a9fe14883b1f9af6faa4bd4f1de.html
Заголовок, (Title) документа по адресу, URL1:
Variant type (COM) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)