PSCoerceToCanonicalValue 函式 (propsys.h)
根據屬性描述,將屬性的值轉換為標準值。
語法
PSSTDAPI PSCoerceToCanonicalValue(
[in] REFPROPERTYKEY key,
[in, out] PROPVARIANT *ppropvar
);
參數
[in] key
類型: REFPROPERTYKEY
PROPERTYKEY 結構的參考,這個結構會識別其值要強制轉型的屬性。
[in, out] ppropvar
類型: PROPVARIANT*
在專案上,包含包含原始值的 PROPVARIANT 結構的指標。 當此函式成功傳回時,會包含標準值。
傳回值
類型: HRESULT
可能的傳回值包括下列各項:
傳回碼 | 描述 |
---|---|
|
此函數已成功。 ppropvar 指定的屬性值現在為標準格式。 |
|
ppropvar 指定的屬性值現在是截斷的正式格式。 |
|
ppropvar 參數無效。 已清除 PROPVARIANT 結構。 |
|
無法從值的型別強制型別到屬性描述的類型。 已清除 PROPVARIANT 結構。 |
|
無法從值的型別強制型別到屬性描述的類型。 已清除 PROPVARIANT 結構。 |
備註
此函式是系統 實作 IPropertyDescription::CoerceToCanonicalValue 的包裝函式。
大部分的屬性描述都會指定預期使用其值的類型。 例如,System.Title 的屬性描述會指定 System.Title 值的類型應為 VT_LPWSTR。 此函式會將值強制轉換為此類型,然後將結果強制轉型為標準形式。
請務必注意,如果此函式失敗,則其已在輸入 PROPVARIANT 結構上呼叫 PropVariantClear。 只有當此函式成功時,才負責在不再需要結構時於 ppropvar 上呼叫 PropVariantClear 的呼叫應用程式。
呼叫 IPropertyStore::GetValue 和 IPropertyStore::SetValue 時,屬性系統也會執行此函式所執行的強制型轉。 應用程式可以相依於屬性系統來執行強制型轉,或使用此函式在應用程式選擇時執行強制型轉。
強制型轉會以四個步驟執行,如下所示:
- 下列值會轉換成 VT_EMPTY。
- 類型為 VT_NULL的值。
- 類型為 NULL VT_LPWSTR、VT_BSTR或VT_LPSTR的值。
- VT_LPWSTR、VT_BSTR或空白或完全由空格組成的VT_LPSTR類型的值。
- VT_FILETIME午夜 1601/01/02 之前的類型值。
- 如果值的類型不是步驟 1 之後VT_EMPTY,則會轉換成屬性描述所指定的類型。 您可以呼叫 IPropertyDescription::GetPropertyType 來取得屬性描述的類型。 如需屬性架構如何影響屬性描述類型的資訊,請參閱 typeInfo。 轉換的執行方式如下:
- 類型為 VT_LPWSTR、VT_BSTR 或 VT_LPSTR 的值會轉換成 VT_VECTOR |使用 InitPropVariantFromStringAsVector VT_LPWSTR。
- 所有其他轉換都是使用 PropVariantChangeType 執行
- 在步驟 2 和 3 之後,值會根據其類型強制轉換成標準形式。 下表摘要說明標準表單。
數值類型 標準表單 VT_EMPTY 一律為標準。 VT_LPWSTR - 沒有前置或尾端空格。 字串為非空白和非NULL。 例如,L“Alice”。
- 如果這是樹狀結構屬性 (也就是說,如果 typeInfo 元素的 isTreeProperty 屬性為 TRUE) ,則它不能有開頭或尾端斜線 (/) 、文字與正斜線之間不能有空格,而且不能有兩個連續的正斜線 (/) 。 例如,L“Friend/Bob”。
- 強制型轉會移除不必要的字元,並在沒有內容時產生VT_EMPTY。
VT_VECTOR |VT_LPWSTR - 向量中的每個字串都必須遵守上述VT_LPWSTR規則。 此外,向量不能有重複專案,而且沒有 Null 指標。
- 如果這是樹狀結構屬性,則沒有任何值可以是另一個值的上階。 例如,L“Friend” 是 L“Friend/Bob” 的上階。
- 如果沒有內容,強制型轉會移除重複和上階字元,併產生VT_EMPTY。
- 如果適用,則會根據屬性描述類型列舉來檢查值。 下表中的檢查適用。
列舉類型 數值類型 標準表單 離散或範圍 VT_EMPTY 一律標準 Discrete VT_LPWSTR 字串符合 屬性允許的其中一個列舉字串。 比較不區分大小寫。 如果沒有,請將值轉換成 VT_EMPTY。 Discrete 數值 數位符合 屬性允許的其中一個列舉值。 如果沒有,請將值轉換成 VT_EMPTY。 Discrete VT_VECTOR |VT_LPWSTR 向量中的每個字串都符合 屬性允許的其中一個列舉字串。 比較不區分大小寫。 如果沒有,請從向量中移除該字串。 如果產生的向量是空的,請將值轉換為VT_EMPTY。 Discrete VT_VECTOR |數位 向量中的每個數位都符合屬性允許的其中一個列舉值。 如果沒有,請從向量中移除該數位。 如果產生的向量是空的,請將值轉換為VT_EMPTY。 不等 VT_LPWSTR 字串存在於 屬性允許的範圍中。 比較會區分大小寫。 如果沒有,請將值轉換成 VT_EMPTY。 不等 數值 數位存在於 屬性允許的範圍中。 如果沒有,請將值轉換成 VT_EMPTY。 不等 VT_VECTOR |VT_LPWSTR 向量中的每個字串都存在於 屬性允許的範圍中。 比較會區分大小寫。 如果沒有,請從向量中移除該字串。 如果產生的向量是空的,請將值轉換成VT_EMPTY。 不等 VT_VECTOR |數位 向量中的每個數位都存在於屬性允許的範圍中。 如果沒有,請從向量中移除該數位。 如果產生的向量是空的,請將值轉換成VT_EMPTY。
範例
下列範例要包含在較大的程式中,示範如何使用 PSCoerceToCanonicalValue 將值強制PKEY_Keywords所需的類型。
// PROPVARIANT propvar;
// Assume variable propvar is initialized and valid.
HRESULT hr = PSCoerceToCanonicalValue(PKEY_Keywords, &propvar);
if (SUCCEEDED(hr))
{
// The conversion succeeded and propvar now is of the correct type for
// PKEY_Keywords, or VT_EMPTY.
PropVariantClear(&propvar);
}
else
{
// The conversion failed and propvar is now VT_EMPTY.
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP 搭配 SP2、Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 SP1 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | propsys.h |
程式庫 | Propsys.lib |
Dll | Propsys.dll (6.0 版或更新版本) |
可轉散發套件 | Windows 桌面搜尋 (WDS) 3.0 |