HRESULT VariantCopyInd( 
  VARIANT FAR*  pvarDest,  
  VARIANTARG FAR*  pvargSrc  
);
 
Frees the destination variant and makes a copy of the source VARIANTARG, performing the necessary indirection if the source is specified to be VT_BYREF.
The return value obtained from the returned HRESULT is one of the following.
| Return value | Meaning | 
|---|---|
| S_OK | Success. | 
| DISP_E_ARRAYISLOCKED | The variant contains an array that is locked. | 
| DISP_E_BADVARTYPE | The source and destination have an invalid variant type (usually uninitialized). | 
| E_OUTOFMEMORY | Memory could not be allocated for the copy. | 
| E_INVALIDARG | The argument pvargSrc was VT_ARRAY. | 
This function is useful when a copy of a variant is needed, and to guarantee that it is not VT_BYREF, such as when handling arguments in an implementation of IDispatch::Invoke.
For example, if the source is a (VT_BYREF | VT_I2), the destination will be a BYVAL | VT_I2. The same is true for all legal VT_BYREF combinations, including VT_VARIANT.
If pvargSrc is (VT_BYREF | VT_VARIANT), and the contained variant is VT_BYREF, the contained variant is also dereferenced.
This function frees any existing contents of pvarDest.
  Windows NT:  Use version 3.1 and later. 
  Windows: Use Windows 95 and later. 
  Header: Declared in oleauto.h.
  Import Library: Link with oleaut32.lib.