IPropertyStorage-Stand-alone-Implementierung
Die vom System bereitgestellte eigenständige Implementierung von IPropertySetStorage umfasst eine Implementierung von IPropertyStorage,der Schnittstelle, die Eigenschaften in einem Eigenschaftensatzspeicher liest und schreibt. Die IPropertySetStorage-Schnittstelle erstellt und öffnet Eigenschaftensätze in einem Speicher. Die Schnittstellen IEnumSTATPROPSTG und IEnumSTATPROPSETSTG werden auch in der eigenständigen Implementierung bereitgestellt.
Um einen Zeiger auf die eigenständige Implementierung von IPropertyStorageabzurufen, rufen Sie die StgCreatePropStg-Funktion auf, um einen neuen Eigenschaftensatz zu erstellen, oder StgOpenPropStg, um den Schnittstellenzeiger für einen vorhandenen Eigenschaftensatz abzurufen (oder rufen Sie die Create- oder Open-Methoden der eigenständigen IPropertySetStorage-Implementierung auf).
Die eigenständige Implementierung von IPropertyStorage erstellt Eigenschaftssätze für alle Speicher- oder Streamobjekte, nicht nur für verbundbasierte Dateispeicher und Streams. Die eigenständige Implementierung ist nicht von Verbunddateien abhängig und kann mit jeder Implementierung strukturierter Speicher verwendet werden. Weitere Informationen zur Verbunddateiimplementierungen dieser Schnittstelle finden Sie unter IPropertyStorage-Compound File Implementation.
Verwendungs wann
Verwenden Sie IPropertyStorage, um Eigenschaften innerhalb eines einzelnen Eigenschaftensatzes zu verwalten. Die Methoden unterstützen das Lesen, Schreiben und Löschen von Eigenschaften und optionalen Zeichenfolgennamen, die Eigenschafts-IDs zugeordnet werden können. Andere Methoden unterstützen die standardmäßigen Commit- und Wiegespeichervorgänge. Es gibt auch eine Methode, die zeiten festlegt, die dem Eigenschaftenspeicher zugeordnet sind, und eine andere , die die Zuweisung einer CLSID ermöglicht, um anderen Code, z. B. Benutzeroberflächencode, dem Eigenschaftensatz zuzuordnen. Die Enum-Methode stellt einen Zeiger auf die eigenständige Implementierung von IEnumSTATPROPSTGbereit, die die Eigenschaften in der Menge aufzählt.
Eigenschaftensatzformate der Version 0 und Version 1
Die eigenständige Implementierung von IPropertyStorage unterstützt sowohl die Serialisierungsformate der Version 0 als auch der Version 1-Eigenschaftensatz. Weitere Informationen finden Sie unter Serialisierung von Eigenschaftensatz. Eigenschaftensätze werden im Format Version 0 erstellt und bleiben in diesem Format erhalten, es sei denn, es werden neue Features angefordert. Zu diesem Zeitpunkt wird das Format auf Version 1 aktualisiert.
Wenn beispielsweise ein Eigenschaftensatz mit dem PROPSETFLAG _ DEFAULT-Flag erstellt wird, lautet das Format Version 0. Solange Eigenschaftstypen, die dem Format version 0 entsprechen, in diesen Eigenschaftensatz geschrieben und daraus gelesen werden, bleibt der Eigenschaftensatz im Format version 0 erhalten. Wenn ein Eigenschaftentyp der Version 1 in den Eigenschaftensatz geschrieben wird, wird der Eigenschaftensatz automatisch auf Version 1 aktualisiert. Anschließend kann dieser Eigenschaftensatz nicht mehr von Implementierungen gelesen werden, die nur Version 0 verstehen.
IPropertyStorage- und Variant-Typen
Die eigenständige Implementierung von IPropertyStorage unterstützt nicht die Variantentypen VT _ UNKNOWN oder VT _ DISPATCH im vt-Member der PROPVARIANT-Struktur.
Die folgenden Variantentypen werden in einem SafeArray unterstützt: Das bedeutet, dass diese Werte mit VT _ ARRAY im vt-Member der PROPVARIANT-Struktur kombiniert werden können.
Variant-Typen, die in SafeArray durch Verbunddateiimplementierungen von IPropertyStorage unterstützt werden
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-FEHLER
VT _ VARIANT
Wenn VT _ VARIANT mit VT ARRAY kombiniert _ wird, enthält SafeArray selbst PROPVARIANT-Strukturen. Die Typen dieser Elemente müssen jedoch aus der vorherigen Liste stammen, dürfen nicht VT VARIANT sein _ und dürfen nicht die VT _ VECTOR-, VT _ ARRAY- oder VT _ BYREF-Indikatoren enthalten.
IPropertyStorage-Methoden
Die eigenständige Implementierung von IPropertyStorage unterstützt die folgenden Methoden:
-
Liest die im rgpspec-Array angegebenen Eigenschaften und stellt die Werte aller gültigen Eigenschaften im rgvar-Array von PROPVARIANT-Elementen zur Verfügung.
In der vom System bereitgestellten eigenständigen Implementierung führen doppelte Eigenschaftsbezeichner, die auf Stream- oder Speichertypen verweisen, zu mehreren Aufrufen von IStorage::OpenStream oder IStorage::OpenStorage, und der Erfolg oder Fehler von ReadMultiple hängt von der Fähigkeit der zugrunde liegenden Speicherimplementierung ab, offene Speicher freizugeben.
Um einen threadsicheren Vorgang sicherzustellen, wenn dieselbe Stream- oder Speicherwerteigenschaft mehrmals über den gleichen IPropertyStorage-Zeiger angefordert wird, ist das Öffnen erfolgreich oder schlägt fehl, je nachdem, ob die Eigenschaft bereits geöffnet ist und ob das zugrunde liegende Dateisystem mehrere Geöffnete eines Streams oder Speichers behandelt. Daher führt der ReadMultiple-Vorgang für eine Stream- oder Speicherwerteigenschaft immer zu einem Aufruf von IStorage::OpenStreamoder IStorage::OpenStorage, wobei der Zugriff (z. B. STGM _ READWRITE) und Freigabewerte (z. B. STGM _ SHARE _ EXCLUSIVE) übergeben werden, die beim ursprünglichen Öffnen oder Erstellen des Eigenschaftensatzes angegeben wurden.
Wenn die Methode fehlschlägt, sind die in rgvar geschriebenen Werte [ ] nicht definiert. Wenn einige Stream- oder Speicherwerteigenschaften erfolgreich geöffnet werden, aber ein Fehler auftritt, bevor die Ausführung abgeschlossen ist, sollten diese Eigenschaften freigegeben werden, bevor die Methode zurückgegeben wird.
-
Schreibt die im rgpspec-Array angegebenen Eigenschaften [ ] und weist ihnen die PROPVARIANT-Tags und -Werte zu, die in rgvar angegeben [ ] sind. Eigenschaften, die bereits vorhanden sind, werden die angegebenen PROPVARIANT-Werte zugewiesen, und Eigenschaften, die derzeit nicht vorhanden sind, werden erstellt.
-
Löscht die in rgpspec angegebenen [ ] Eigenschaften.
-
Liest vorhandene Zeichenfolgennamen, die den im rgpropid-Array angegebenen Eigenschaften-IDs zugeordnet [ ] sind.
-
Weist im rglpwstrName-Array angegebene Zeichenfolgennamen eigenschaften-IDs zu, die im rgpropid-Array angegeben sind.
-
Löscht die Zeichenfolgennamen der eigenschaften-IDs, die im rgpropid-Array angegeben sind, indem NULL in den Eigenschaftennamen geschrieben wird.
-
Legt die CLSID des Eigenschaftensatzstreams fest. In der eigenständigen Implementierung legt das Festlegen der CLSID für einen nicht einfachen Eigenschaftensatz (eine, die Speicher- oder Streamwerteigenschaften enthalten kann, wie unter IPropertySetStorage::Createbeschrieben) auch die CLSID für die zugrunde liegende Unterspeicherung fest, sodass sie durch einen Aufruf von IStorage::Statabgerufen werden kann.
-
Leert sowohl für einfache als auch für nicht einfache Eigenschaftensätze das Speicherimage in das Datenträgersubsystem. Darüber hinaus ruft diese Methode für nicht einfache Transacted Mode-Eigenschaftensätze IStorage::Commit für den Eigenschaftensatz auf.
-
Nur für Nicht-Imple-Eigenschaftssätze ruft die Revert-Methode des zugrunde liegenden Speichers auf und öffnet den Datenstrom "contents" erneut. Bei einfachen Eigenschaftensätzen gibt nur E _ OK zurück.
-
Erstellt ein Enumeratorobjekt, das IEnumSTATPROPSTGimplementiert, dessen Methoden aufgerufen werden können, um die STATPROPSTG-Strukturen aufzuzählen, die Informationen zu den einzelnen Eigenschaften in der Menge bereitstellen.
Diese Implementierung erstellt ein Array, in das der gesamte Eigenschaftensatz gelesen wird und das freigegeben werden kann, wenn IEnumSTATPROPSTG::Clone aufgerufen wird.
-
Füllt die Member einer STATPROPSETSTG-Struktur aus, die Informationen über den gesamten Eigenschaftensatz enthält. Gibt bei der Rückgabe einen Zeiger auf die -Struktur an.
Für nicht einfache Speichersätze ruft diese Implementierung IStorage::Stat (oder IStream::Stat) auf, um die Informationen aus dem zugrunde liegenden Speicher oder Stream abzurufen.
-
Legt nur für Nonsimple-Eigenschaftssätze die vom zugrunde liegenden Speicher unterstützten Zeiten fest. Diese Implementierung von SetTimes ruft die IStorage::SetElementTimes-Methode des zugrunde liegenden Speichers auf, um die Zeiten zu ändern. Sie unterstützt die von der zugrunde liegenden Methode unterstützten Zeiten, z. B. Änderungszeit, Zugriffszeit oder Erstellungszeit.