次の方法で共有


PropVariantChangeType 関数 (propvarutil.h)

PROPVARIANT 構造体として格納されている値を、異なるバリアント型の同等の値に強制的に変換します。

構文

PSSTDAPI PropVariantChangeType(
  [out] PROPVARIANT          *ppropvarDest,
  [in]  REFPROPVARIANT       propvarSrc,
  [in]  PROPVAR_CHANGE_FLAGS flags,
  [in]  VARTYPE              vt
);

パラメーター

[out] ppropvarDest

型: PROPVARIANT*

この関数が正常に返されると、強制値とその新しい型を受け取る PROPVARIANT 構造体へのポインター。

[in] propvarSrc

型: REFPROPVARIANT

元の型として表される値を含むソース PROPVARIANT 構造体への参照。

[in] flags

種類: PROPVAR_CHANGE_FLAGS

予約済み。0 である必要があります。

[in] vt

型: VARTYPE

値の新しい型を指定します。 認識される型名については、次の表を参照してください。

戻り値

種類: HRESULT

成功した場合 はS_OK を返し、それ以外の場合は標準の COM エラー値を返します。 要求された強制が不可能な場合は、エラーが返されます。

注釈

ソースと変換先の PROPVARIANT 構造体は、個別の構造体である必要があることに注意してください。 ソース PROPVARIANT データを新しい変換先データで上書きすることはできません。これを試みると、エラーが発生します。

PropVariantChangeType は、次のように次の型の間で値を変換します。 数値は、表の後に説明された条件を示します。

VT_LPWSTR VT_BSTR VT_BOOL VT_FILETIME VT_DATE VT_CLSID
VT_LPWSTR Yes Yes はい はい (2) はい (2) Yes
VT_BSTR Yes Yes はい はい (2) はい (2) Yes
VT_BOOL Yes Yes はい いいえ いいえ いいえ
VT_I2 Yes Yes はい いいえ いいえ いいえ
VT_I4 Yes Yes はい いいえ いいえ いいえ
VT_I8 Yes Yes はい いいえ いいえ いいえ
VT_UI2 Yes Yes はい いいえ いいえ いいえ
VT_UI4 Yes Yes はい いいえ いいえ いいえ
VT_UI8 Yes Yes はい いいえ いいえ いいえ
VT_R8 はい (3) はい (3) はい いいえ いいえ いいえ
VT_FILETIME はい (2) はい (2) いいえ Yes はい いいえ
VT_DATE はい (2) はい (2) いいえ Yes はい いいえ
VT_CLSID Yes はい いいえ いいえ いいえ Yes
 
VT_I2 VT_I4 VT_I8 VT_UI2 VT_UI4 VT_UI8 VT_R8
VT_LPWSTR Yes Yes Yes Yes Yes Yes はい (3)
VT_BSTR Yes Yes Yes Yes Yes Yes はい (3)
VT_BOOL Yes Yes Yes Yes Yes Yes Yes
VT_I2 Yes Yes はい はい (1) はい (1) はい (1) はい (1)
VT_I4 はい (1) Yes はい はい (1) はい (1) はい (1) はい (1)
VT_I8 はい (1) はい (1) はい はい (1) はい (1) はい (1) はい (1)
VT_UI2 はい (1) Yes Yes Yes Yes はい はい (1)
VT_UI4 はい (1) はい (1) はい はい (1) Yes はい はい (1)
VT_UI8 はい (1) はい (1) はい (1) はい (1) はい (1) はい はい (1)
VT_R8 はい (1) はい (1) はい (1) はい (1) はい (1) はい (1) Yes
VT_FILETIME いいえ いいえ いいえ いいえ いいえ いいえ いいえ
VT_DATE いいえ いいえ いいえ いいえ いいえ いいえ いいえ
VT_CLSID いいえ いいえ いいえ いいえ いいえ いいえ いいえ
 

条件

  1. 数値型間で変換すると、範囲外の変換は失敗します。 たとえば、符号なし型に負の符号付き値を指定したり、65535 より大きい 4 バイト符号なし値を 2 バイトの符号なし型にしたりします。
  2. 文字列と日付の間で変換する場合、ローカライズされた表現や "人間が判読できる" 表現ではなく、正規の文字列形式が使用されます。 形式は "yyyy/mm/dd:hh:mm:ss.fff" (年、月、日付、時間、分、秒、ミリ秒) です。 これは FILETIME 型でサポートされているよりも精度が低くなりますが、ほとんどの目的で十分であることに注意してください。
  3. 浮動小数点数と文字列の間で変換する場合は、現在のロケールの小数点区切り記号が使用されます。 これにより、これらの値が異なるロケール間で移動されるファイルに保存されるときに問題が発生する可能性があることに注意してください。
メモ 今後、追加の種類がサポートされる可能性があります。
 
場合によっては、ベクトル (VT_VECTOR) と配列 (VT_ARRAY) 間の変換がサポートされる場合があります。 サポートされている場合、各要素の数は同じである必要があります。 単一値ベクトルは非ベクトル値に変換できますが、複数値ベクトルを非ベクトル型に変換することはできません。

型間の強制型変換は、プロパティ固有の情報を考慮せずに実行されます。 プロパティ固有の強制型変換は、 PSCoerceToCanonicalValue を使用して実行する必要があります。 また、UI の目的で値の文字列形式が必要な場合は、PropVariantChangeType を使用して値を文字列に強制するのではなく、PSFormatForDisplay を使用してロケールおよびプロパティ固有の情報に従って値を書式設定する必要があります。

大きなプログラムの一部として含める次のコード例は、 PropVariantChangeType を使用して文字列から VT_FILETIME 値を初期化する方法を示しています。

PROPVARIANT propvarString = {0};
                    
HRESULT hr = InitPropVariantFromString(L"2007/01/30:12:00:00.000", &propvarString);
if (SUCCEEDED(hr))
{
    PROPVARIANT propvarFiletime = {0};

    hr = PropVariantChangeType(&propvarFiletime, propvarString, 0, VT_FILETIME);
    if (SUCCEEDED(hr))
    {
        // propvarFiletime now contains the FILETIME representation 
        // of 1/30/2007 12:00 PM
        PropVariantClear(&propvarFiletime);
    }
    PropVariantClear(&propvarString);
}

要件

要件
サポートされている最小のクライアント WINDOWS XP と SP2、Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 SP1 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー propvarutil.h
Library Propsys.lib
[DLL] Propsys.dll (バージョン 6.0 以降)
再頒布可能パッケージ Windows デスクトップ検索 (WDS) 3.0