次の方法で共有


VariantChangeType 関数 (oleauto.h)

重要

この API は、CY 値が非常に大きい場合に VarI8FromCy が正しくない値を生成Microsoft サポートトピックで説明されている問題の影響を受けます。

バリアント型をある型から別の型に変換します。

構文

HRESULT VariantChangeType(
  [out] VARIANTARG       *pvargDest,
  [in]  const VARIANTARG *pvarSrc,
  [in]  USHORT           wFlags,
  [in]  VARTYPE          vt
);

パラメーター

[out] pvargDest

変換先バリアント。 これが pvarSrc と同じ場合、バリアントはインプレースで変換されます。

[in] pvarSrc

変換するバリアント。

[in] wFlags

フラグ。

意味
VARIANT_NOVALUEPROP
Value プロパティを取得して、関数がオブジェクトを基本型に強制することを防ぎます。 アプリケーションでは、動作が他のアプリケーションと矛盾するため、必要な場合にのみこのフラグを設定する必要があります。
VARIANT_ALPHABOOL
VT_BOOL値を、"True" または "False" を含む文字列に変換します。
VARIANT_NOUSEROVERRIDE
VT_BSTR間の変換の場合は、LOCALE_NOUSEROVERRIDEをコア強制ルーチンに渡します。
VARIANT_LOCALBOOL
VT_BOOL から VT_BSTR および back への変換では、ローカル コンピューターで使用されているロケールで指定された言語を使用します。

[in] vt

変換後の型。 戻りコードがS_OK場合、*pvargDestvt フィールドはこの値と等しいことが保証されます。

戻り値

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

リターン コード 説明
S_OK
正常終了しました。
DISP_E_BADVARTYPE
バリアント型がバリアント型の有効な型ではありません。
DISP_E_OVERFLOW
pvarSrc が指すデータは、変換先の型に収まりません。
DISP_E_TYPEMISMATCH
引数を指定した型に強制することはできません。
E_INVALIDARG
引数の 1 つが無効です。
E_OUTOFMEMORY
操作を完了するにはメモリが不足しています。

注釈

VariantChangeType 関数は、基本型 (数値から文字列への強制型と文字列間強制型を含む) 間の強制変換を処理します。 pvarSrc 引数は、変換プロセス中に変更されます。 たとえば、ソースバリアントがVT_BOOL型で、変換先がVT_UINT型の場合、 pvarSrc 引数は最初にVT_I2に変換され、変換が続行されます。 VT_BYREF設定されたバリアント型 (variant) は、参照先の値を取得することによって値に強制変換されます。 オブジェクトの Value プロパティ (DISPID_VALUE) を呼び出して、オブジェクトを値に強制変換します。

通常、 IDispatch::Invoke の実装者はアクセスするメンバーを決定し、 VariantChangeType を 呼び出して 1 つ以上の引数の値を取得します。 たとえば、 IDispatch 呼び出しで 1 つの文字列引数を受け取る SetTitle メンバーが指定されている場合、実装者は VariantChangeType を 呼び出して、引数をVT_BSTRに強制しようとします。 VariantChangeType がエラーを返さない場合、引数は VARIANTARG の bstrVal フィールドから直接取得できます。 VariantChangeType がDISP_E_TYPEMISMATCHを返す場合、実装者は *puArgErr を 0 に設定し (エラーの引数を示します)、Invoke からDISP_E_TYPEMISMATCHを返します

ある型の配列は、この関数を使用して別の型の配列に変換できません。

メモ VARIANTARG の型は、 rgvarg 配列内で変更しないでください。
 

要件

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

こちらもご覧ください

バリアント操作関数

VariantChangeTypeEx