Verwalten von Eigenschaften
Jede Eigenschaft besteht aus einem Eigenschaftsbezeichner (eindeutig innerhalb des Eigenschaftensatzes), einem Variant Type-Tag (VT oder VarType), das den Typ eines Werts darstellt, und dem Wert selbst. Das Tag variant type beschreibt die Darstellung der Daten im Wert. Darüber hinaus kann einer Eigenschaft auch ein Zeichenfolgenname zugewiesen werden, der verwendet werden kann, um die Eigenschaft zu identifizieren, anstatt den erforderlichen numerischen Eigenschaftsbezeichner (ID) zu verwenden. Zum Erstellen und Verwalten von Eigenschaften definiert COM die IPropertyStorage-Schnittstelle .
Die IPropertyStorage-Schnittstelle enthält Methoden zum Lesen und Schreiben von Arrays mit Eigenschaften- oder Eigenschaftennamen. Die Schnittstelle enthält Commit- und Revert-Methoden , die IStorage-Methoden mit demselben Namen ähneln. Es gibt Hilfsmethoden, mit denen Sie den Klassenbezeichner (CLSID) des Eigenschaftensatzes festlegen, die dem Satz zugeordneten Zeiten festlegen und Statistiken zum Eigenschaftensatz abrufen können. Schließlich erstellt die Enum-Methode einen Enumerator und gibt einen Zeiger auf die IEnumSTATPROPSTG-Schnittstelle zurück. Sie können die Methoden dieser Schnittstelle aufrufen, um STATPROPSTG-Strukturen für Ihr Objekt aufzulisten, wodurch Informationen zu allen Eigenschaften im aktuellen Eigenschaftensatz bereitgestellt werden.
Im Folgenden finden Sie ein Beispiel für die Darstellung von Eigenschaften. Wenn eine bestimmte Eigenschaft in einem Eigenschaftssatz den wissenschaftlichen Namen eines Tieres enthält, kann dieser Name als Zeichenfolge mit Null beendet werden. Zusammen mit dem Namen gespeichert ist ein Typindikator, der angibt, dass der Wert eine Zeichenfolge mit Null ist. Diese Eigenschaften können die folgenden Merkmale aufweisen:
Eigenschafts-ID | Zeichenfolgenbezeichner | Typindikator | Dargestellter Wert |
---|---|---|---|
02 | PID_ANIMALNAME | VT_LPWSTR | Unicode-Zeichenfolge mit Null-Endung |
03 | PID_LEGCOUNT | VT_I2 | WORD |
Jede Anwendung, die das Eigenschaftssatzformat erkennt , das über ihren Formatbezeichner (FMTID) identifiziert wird, kann die Eigenschaft mit einem Bezeichner von PID_ANIMALNAME betrachten, feststellen, dass es sich um eine Zeichenfolge mit Null ist, und den Wert lesen und schreiben. Obwohl die Anwendung IPropertyStorage::ReadMultiple aufrufen kann, um einen oder alle Eigenschaftensätze zu lesen (nachdem sie zuerst einen Zeiger erhalten hat), muss die Anwendung wissen, wie der Eigenschaftensatz interpretiert wird.
Ein Eigenschaftswert wird über Eigenschaftenschnittstellen als instance des Typs PROPVARIANT übergeben.
Es ist wichtig, zwischen diesen gespeicherten (persistenten) Eigenschaften und Laufzeiteigenschaften zu unterscheiden. Wertkonstanten vom Typ Variant haben Namen, die mit VT_ beginnen. Der Satz gültiger PROPVARIANTs entspricht jedoch nicht vollständig der Gruppe von VARIANTs, die in Automatisierungs- und ActiveX-Steuerelementen verwendet werden.
Der einzige Unterschied zwischen den beiden Strukturen ist der zulässige Satz von VT_ -Tags (Variant Type /VarType) in jedem. Wenn ein bestimmter Eigenschaftstyp sowohl in einer VARIANT- als auch in einer PROPVARIANT-Eigenschaft verwendet werden kann, weist das Type-Tag (der VT_-Wert) immer einen identischen Wert auf. Darüber hinaus ist für einen bestimmten VT_ Wert die in VARIANTs und PROPVARIANTs verwendete In-Memory-Darstellung identisch. Alles in allem ermöglicht dieser Ansatz dem Typsystem, nicht zulässige Typtags abzufangen, während gleichzeitig ein sachkundiger Client bei Bedarf eine Zeigerumwandlung implementieren kann.
Weitere Informationen finden Sie im folgenden Abschnitt unter Überlegungen zu Eigenschaftenspeicher.