Serialisierung von Property Set

Es gibt zwei Versionen des Serialisierungsformats für Den Eigenschaftensatz. Die ursprüngliche Spezifikation beschreibt Version 0 des Formats. Weitere Informationen finden Sie unter Formatversion . Version 1 erweitert die ursprüngliche Version. Alle Eigenschaftssätze der Version 0 sind als Eigenschaftssätze der Version 1 gültig. Das Feld Version formatieren im Header eines serialisierten Eigenschaftensatzes gibt die Version an.

Die folgenden Elemente identifizieren die Unterschiede zwischen den Serialisierungsformaten für Eigenschaftensätze von Version 0 und Version 1.

  • Unterstützung für neue VARTYPE-Werte . Weitere Informationen zu VARTYPE-Werten und deren Verwendung finden Sie im Thema IDispatch-Datentypen und -Strukturen und der PROPVARIANT-Struktur .

    Die folgenden VARTYPE-Werte werden in Eigenschaftssätzen der Version 0 nicht unterstützt, aber in Version 1:

    VT_I1

    VT_VECTOR | VT_I1

    VT_INT

    VT_UINT

    VT_DECIMAL

    Darüber hinaus kann SafeArrays in einem Eigenschaftensatz serialisiert werden. Das Vorhandensein eines SafeArray wird durch das VT_ARRAY Bits angegeben, das mithilfe eines OR-Vorgangs mit den Arrayelementen im vt-Member der PROPVARIANT-Struktur kombiniert wird. Ein SafeArray mit 4-Byte-Ganzzahlen mit Vorzeichen weist beispielsweise den Typ VT_ARRAY | VT_I4.

    Die folgenden Elementtypen sind für safeArray in einem serialisierten Eigenschaftensatz gültig:

           
    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      
         

    Wenn der VT_VARIANT Datentyp angegeben wird, gibt dies an, dass der SafeArray selbst PROPVARIANT-Strukturen enthält. Die Typen für diese Elemente müssen aus der vorherigen Liste stammen, mit der Ausnahme, dass sie keine geschachtelten VT_VARIANT Typen enthalten können.

    Beachten Sie, dass Implementierungen von IPropertyStorage in der Lage sein müssen, ordnungsgemäß wiederherzustellen, indem sie einen Fehler zurückgeben, wenn ein neuer Typ gefunden wird. beispielsweise VARENUM-Typen.

  • Bei Eigenschaftennamen wird die Groß-/Kleinschreibung beachtet. Bei Eigenschaftsnamen, z. B. in der IPropertyStorage::WritePropertyNames-Methode angegeben, wird die Groß-/Kleinschreibung in Den Eigenschaftensätzen der Version 0 nicht beachtet. In Eigenschaftssätzen der Version 1 kann die Groß-/Kleinschreibung von Eigenschaftennamen abhängig vom Wert der neuen Behavior-Eigenschaft beachtet werden.

    Die Behavior-Eigenschaft ist Eigenschafts-ID 0x80000003 mit einem Typ von VT_UI4. Wenn das niedrigste Bit dieses Werts festgelegt ist, wird bei den Namen des Eigenschaftssatzes die Groß-/Kleinschreibung beachtet. Legen Sie das flag PROPSETFLAG_CASE_SENSITIVE im grfFlags-Parameter der IPropertySetStorage::Create-Methode fest, um einen Eigenschaftssatz anzugeben, bei dem die Groß-/Kleinschreibung beachtet wird.

  • Lange Eigenschaftsnamen. Eigenschaftennamen für Eigenschaftssätze der Version 0 müssen kleiner oder gleich 256 Zeichen sein, einschließlich des Zeichenfolgenabschlusszeichens, für Eigenschaftssätze auf der Unicode-Codepage. Wenn sie nicht auf der Unicode-Codepage enthalten sind, müssen sie kleiner als 256 Bytes sein. Eigenschaftssätze der Version 1 können dagegen Eigenschaftsnamen mit unbegrenzter Länge aufweisen, obwohl sie immer noch durch die Gesamtgröße der Eigenschaftssatzgröße von 256 Kilobyte (KB) begrenzt sind.

Es wird empfohlen, dass Implementierungen von IPropertyStorage standardmäßig Eigenschaftssätze der Version 0 erstellen und verwalten. Wenn ein Aufrufer anschließend ein Feature anfordert, das für das Format der Version 1 spezifisch ist, sollte nur dann die Version des Eigenschaftensatzes aktualisiert werden. Wenn beispielsweise eine Eigenschaft vom Typ VT_ARRAY geschrieben wird oder ein langer Eigenschaftenname geschrieben wird, sollte die Implementierung das Eigenschaftssatzformat auf Version 1 aktualisieren. Eine Ausnahme von dieser Richtlinie tritt auf, wenn der PROPSETFLAG_CASE_SENSITIVE Enumerationswert im Aufruf von IPropertySetStorage::Create angegeben wird. In diesem Fall muss der Eigenschaftensatz als Eigenschaftssatz der Version 1 erstellt werden.