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


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

Важно!

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

Преобразует вариант из одного типа в другой с помощью LCID.

Синтаксис

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

Параметры

[out] pvargDest

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

[in] pvarSrc

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

[in] lcid

Код локали. Идентификатор LCID полезен, если тип источника или назначения VARIANTARG — VT_BSTR, VT_DISPATCH или VT_DATE.

[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
Недостаточно памяти для завершения операции.

Комментарии

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

Как правило, реализация IDispatch::Invoke определяет, к какому члену осуществляется доступ, а затем вызывает VariantChangeType , чтобы получить значение одного или нескольких аргументов. Например, если в вызове IDispatch указывается член SetTitle, который принимает один строковый аргумент, то реализующий вызовет VariantChangeTypeEx , чтобы попытаться принудить аргумент для VT_BSTR.

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

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

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

Требования

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

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

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

VariantChangeType