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


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

Освобождает вариант назначения и создает копию исходного варианта.

Синтаксис

HRESULT VariantCopy(
  [out] VARIANTARG       *pvargDest,
  [in]  const VARIANTARG *pvargSrc
);

Параметры

[out] pvargDest

Вариант назначения.

[in] pvargSrc

Исходный вариант.

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

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

Код возврата Описание
S_OK
Успешно.
DISP_E_ARRAYISLOCKED
Вариант содержит заблокированный массив.
DISP_E_BADVARTYPE
Тип variant не является допустимым типом variant.
E_INVALIDARG
Один из аргументов недопустим.
E_OUTOFMEMORY
Недостаточно памяти для завершения операции.

Комментарии

Во-первых, освободите любую память, принадлежающую pvargDest, например VariantClear (pvargDest должна указывать на допустимый инициализированный вариант, а не просто на неинициализированное расположение памяти). Затем pvargDest получает точную копию содержимого pvargSrc.

Если pvargSrc является VT_BSTR, создается копия строки. Если pvargSrc представляет собой VT_ARRAY, копируется весь массив. Если pvargSrc является VT_DISPATCH или VT_UNKNOWN, вызывается Метод AddRef для увеличения числа ссылок объекта.

Если копируемым вариантом является COM-объект, передаваемый по ссылке, поле vtfield pvargSrcparameter VT_DISPATCH | VT_BYREF или VT_UNKNOWN | VT_BYREF. В этом случае VariantCopy не увеличивает количество ссылок на объект, на который указывает ссылка. Так как копируемый вариант является указателем на ссылку на объект, VariantCopy не может определить, нужно ли увеличивать количество ссылок объекта. Поэтому вызывающий объект несет ответственность за вызов IUnknown::AddRef для объекта или нет соответствующим образом.

Примечание Метод VariantCopy не является threadsafe.
 

Требования

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

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

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