Поделиться через


Функция VariantChangeType (oleauto.h)

Важно!

На этот API влияет проблема, описанная в служба поддержки Майкрософт разделе VarI8FromCy создает неверное значение, если значение CY очень велико.

Преобразует вариант из одного типа в другой.

Синтаксис

HRESULT VariantChangeType(
  [out] VARIANTARG       *pvargDest,
  [in]  const VARIANTARG *pvarSrc,
  [in]  USHORT           wFlags,
  [in]  VARTYPE          vt
);

Параметры

[out] pvargDest

Вариант назначения. Если это то же самое, что и pvarSrc, вариант будет преобразован на месте.

[in] pvarSrc

Преобразуемый вариант.

[in] wFlags

Флаги.

Значение Значение
VARIANT_NOVALUEPROP
Предотвращает попытку функции принудить объект к фундаментальному типу, получив свойство Value. Приложения должны устанавливать этот флаг только при необходимости, так как это делает их поведение несогласованным с другими приложениями.
VARIANT_ALPHABOOL
Преобразует значение VT_BOOL в строку, содержащую "True" или "False".
VARIANT_NOUSEROVERRIDE
Для преобразований в VT_BSTR или из нее передает LOCALE_NOUSEROVERRIDE основным подпрограммам приведения.
VARIANT_LOCALBOOL
Для преобразования из VT_BOOL в VT_BSTR и обратно использует язык, заданный языковым стандартом, используемым на локальном компьютере.

[in] vt

Целевой тип преобразования. Если код возврата S_OK, поле vt *pvargDest гарантированно будет равно этому значению.

Возвращаемое значение

Эта функция может возвращать одно из этих значений.

Код возврата Описание
S_OK
Успешно.
DISP_E_BADVARTYPE
Тип variant не является допустимым типом variant.
DISP_E_OVERFLOW
Данные, на которые указывает pvarSrc, не помещаются в тип назначения.
DISP_E_TYPEMISMATCH
Не удалось привести аргумент к указанному типу.
E_INVALIDARG
Один из аргументов недопустим.
E_OUTOFMEMORY
Недостаточно памяти для завершения операции.

Комментарии

Функция VariantChangeType обрабатывает приведение между основными типами (включая приведение между числом и числом). Аргумент pvarSrc изменяется в процессе преобразования. Например, если исходный вариант имеет тип VT_BOOL, а назначение имеет тип VT_UINT, аргумент pvarSrc сначала преобразуется в VT_I2, а затем выполняется преобразование. Вариант, имеющий VT_BYREF задано, принудилось к значению путем получения указанного значения. Объект приводится к значению путем вызова свойства Value объекта (DISPID_VALUE).

Как правило, реализация IDispatch::Invoke определяет, к какому члену осуществляется доступ, а затем вызывает VariantChangeType , чтобы получить значение одного или нескольких аргументов. Например, если в вызове IDispatch указывается член SetTitle , принимающем один строковый аргумент, реализующий будет вызывать VariantChangeType , чтобы попытаться принудить аргумент для VT_BSTR. Если VariantChangeType не возвращает ошибку, аргумент может быть получен непосредственно из поля bstrVal variantARG. Если VariantChangeType возвращает DISP_E_TYPEMISMATCH, то реализация присвоит *puArgErr значение 0 (указывая аргумент в ошибке) и вернет DISP_E_TYPEMISMATCH из Invoke.

Массивы одного типа нельзя преобразовать в массивы другого типа с помощью этой функции.

Примечание Тип VARIANTARG не следует изменять в массиве rgvarg на месте.
 

Требования

Требование Значение
Целевая платформа Windows
Header oleauto.h
Библиотека OleAut32.lib
DLL OleAut32.dll

См. также раздел

Функции обработки вариантов

VariantChangeTypeEx