次の方法で共有


VariantCopy 関数 (oleauto.h)

変換先バリアントを解放し、ソースバリアントのコピーを作成します。

構文

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

パラメーター

[out] pvargDest

変換先バリアント。

[in] pvargSrc

ソースバリアント。

戻り値

この関数は、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
正常終了しました。
DISP_E_ARRAYISLOCKED
バリアントには、ロックされている配列が含まれています。
DISP_E_BADVARTYPE
バリアント型がバリアント型の有効な型ではありません。
E_INVALIDARG
引数の 1 つが無効です。
E_OUTOFMEMORY
操作を完了するにはメモリが不足しています。

解説

まず、 VariantClear などの pvargDest によって所有されているメモリをすべて解放します (pvargDest は、初期化されていないメモリの場所だけでなく、有効な初期化されたバリアントを指す必要があります)。 その後、pvargDest は pvargSrc の内容の正確なコピーを受け取ります。

pvargSrc がVT_BSTRの場合は、文字列のコピーが作成されます。 pvargSrcis がVT_ARRAYの場合、配列全体がコピーされます。 pvargSrc がVT_DISPATCHまたはVT_UNKNOWNの場合、 AddRef が呼び出され、オブジェクトの参照カウントがインクリメントされます。

コピーするバリアントが参照渡しされる COM オブジェクトの場合、pvargSrcparameter の vtfield は VT_DISPATCH |VT_BYREFまたはVT_UNKNOWN |VT_BYREF。 この場合、 VariantCopy は参照先オブジェクトの参照カウントをインクリメントしません。 コピーされるバリアントはオブジェクトへの参照へのポインターであるため、 VariantCopy では、オブジェクトの参照カウントをインクリメントする必要があるかどうかを判断する方法はありません。 したがって、必要に応じて、呼び出し元がオブジェクトに対して IUnknown::AddRef を呼び出す必要があります。

メモVariantCopy メソッドはスレッド セーフではありません。
 

必要条件

   
対象プラットフォーム Windows
ヘッダー oleauto.h
Library OleAut32.lib
[DLL] OleAut32.dll

関連項目

バリアント操作関数