Функция 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
Флаги.
[in] vt
Целевой тип преобразования. Если код возврата S_OK, поле vt *pvargDest гарантированно будет равно этому значению.
Возвращаемое значение
Эта функция может возвращать одно из этих значений.
Код возврата | Описание |
---|---|
|
Успешно. |
|
Тип variant не является допустимым типом variant. |
|
Данные, на которые указывает pvarSrc, не помещаются в тип назначения. |
|
Не удалось привести аргумент к указанному типу. |
|
Один из аргументов недопустим. |
|
Недостаточно памяти для завершения операции. |
Комментарии
Функция 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.
Массивы одного типа нельзя преобразовать в массивы другого типа с помощью этой функции.
Требования
Целевая платформа | Windows |
Header | oleauto.h |
Библиотека | OleAut32.lib |
DLL | OleAut32.dll |