次の方法で共有


VariantChangeTypeEx 関数 (oleauto.h)

重要

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

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

構文

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

パラメーター

[out] pvargDest

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

[in] pvarSrc

変換するバリアント。

[in] lcid

ロケール識別子です。 LCID は、ソースまたは宛先 VARIANTARG の型がVT_BSTR、VT_DISPATCH、またはVT_DATEの場合に便利です。

[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
操作を完了するためのメモリ不足。

解説

VariantChangeTypeEx 関数は、基本型 (数値から文字列、文字列から数値への強制型を含む) 間の強制型変換を処理します。 VT_BYREFが設定されたバリアントは、参照される値を取得することによって値に強制変換されます。 オブジェクトは、オブジェクトの Value プロパティ (DISPID_VALUE) を呼び出すことによって値に強制変換されます。

通常、 IDispatch::Invoke の実装者はアクセスするメンバーを決定し、 VariantChangeType を呼び出して 1 つ以上の引数の値を取得します。 たとえば、 IDispatch 呼び出しで 1 つの文字列引数を受け取る SetTitle メンバーが指定されている場合、実装者は VariantChangeTypeEx を呼び出して、引数を強制的にVT_BSTRします。

VariantChangeTypeEx がエラーを返さない場合、引数は VARIANTARG の bstrVal フィールドから直接取得できます。 VariantChangeTypeEx がDISP_E_TYPEMISMATCHを返す場合、実装者は *puArgErr を 0 に設定し (エラーの引数を示します)、IDispatch::Invoke からDISP_E_TYPEMISMATCHを返します。

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

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

必要条件

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

関連項目

バリアント操作関数

VariantChangeType