屬性集串行化
屬性集串行化格式有兩個版本。 原始規格描述格式的第0版。 如需詳細資訊,請參閱 格式版本。 第 1 版會擴充原始版本。 所有第0版屬性集都有效為第1版屬性集。 串行化屬性集標頭中的 [格式版本] 字段表示版本。
下列項目會識別第0版與第1版屬性集串行化格式之間的差異。
支援新的 VARTYPE 值。 如需 VARTYPE 值及其使用方式的詳細資訊,請參閱主題 IDispatch 數據類型和結構 和 PROPVARIANT 結構。
第 0 版屬性集不支援下列 VARTYPE 值,但第 1 版支援:
VT_I1
VT_VECTOR |VT_I1
VT_INT
VT_UINT
VT_DECIMAL
此外,SafeArrays 可以在屬性集中串行化。 SafeArray 的存在是由使用 OR 運算的VT_ARRAY位所表示,而 vt 中的陣列元素 PROPVARIANT 結構的成員 成員。 例如,4 位元組帶正負號整數的SafeArray類型為VT_ARRAY |VT_I4。
下列項目類型對串行化屬性集中的 SafeArray 有效:
VT_I1 VT_UI1 VT_I2 VT_UI2 VT_I4 VT_UI4 VT_INT VT_UINT VT_R4 VT_R8 VT_CY VT_DATE VT_BSTR VT_BOOL VT_DECIMAL VT_ERROR VT_VARIANT 指定VT_VARIANT數據類型時,它表示SafeArray本身會保存 PROPVARIANT 結構。 這些元素的類型必須來自上述清單,但不能包含巢狀VT_VARIANT型別。
請注意,IPropertyStorage 的實作必須能夠在遇到新類型時傳回錯誤,以正常復原;例如,VARENUM 類型。
區分大小寫的屬性名稱。 屬性名稱,例如在 IPropertyStorage::WritePropertyNames 方法中指定的名稱,在版本 0 屬性集中不區分大小寫。 在第 1 版屬性集中,屬性名稱可能會區分大小寫,視新 Behavior 屬性的值而定。
Behavior 屬性 屬性標識碼0x80000003类型为 VT_UI4。 如果設定這個值的最低位,屬性集名稱會區分大小寫。 在 IPropertySetStorage::Create 方法的 grfFlags 參數中設定PROPSETFLAG_CASE_SENSITIVE旗標,以指定區分大小寫的屬性集。
Long 屬性名稱。 第 0 版屬性集的屬性名稱必須小於或等於 256 個字元,包括字串終止符,用於 Unicode 代碼頁中的屬性集。 如果不是在 Unicode 代碼頁中,它們必須小於 256 個字節。 另一方面,第 1 版屬性集可以具有無限長度的屬性名稱,不過它們仍然受限於整體屬性集大小限制 256 KB。
建議依預設建立和維護第0版屬性集 IPropertyStorage 的實作。 如果呼叫端後續要求第 1 版格式的特定功能,則只有更新屬性集的版本。 例如,如果寫入類型為 VT_ARRAY 的屬性,或寫入長屬性名稱,則實作應該將屬性集格式更新為第 1 版。 如果在呼叫 IPropertySetStorage::Create中指定了PROPSETFLAG_CASE_SENSITIVE列舉值,就會發生此指導方針的一個例外狀況。 在此情況下,屬性集必須建立為第 1 版屬性集。