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