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 | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
条件
- 数値型間で変換すると、範囲外の変換は失敗します。 たとえば、符号なし型に負の符号付き値を指定したり、65535 より大きい 4 バイト符号なし値を 2 バイトの符号なし型にしたりします。
- 文字列と日付の間で変換する場合、ローカライズされた表現や "人間が判読できる" 表現ではなく、正規の文字列形式が使用されます。 形式は "yyyy/mm/dd:hh:mm:ss.fff" (年、月、日付、時間、分、秒、ミリ秒) です。 これは FILETIME 型でサポートされているよりも精度が低くなりますが、ほとんどの目的で十分であることに注意してください。
- 浮動小数点数と文字列の間で変換する場合は、現在のロケールの小数点区切り記号が使用されます。 これにより、これらの値が異なるロケール間で移動されるファイルに保存されるときに問題が発生する可能性があることに注意してください。
型間の強制型変換は、プロパティ固有の情報を考慮せずに実行されます。 プロパティ固有の強制型変換は、 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 |