IPropertyStorage-Eigenständige 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 ebenfalls in der eigenständigen Implementierung bereitgestellt.
Um einen Zeiger auf die eigenständige Implementierung von IPropertyStorage abzurufen, 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 jedes Speicher- oder Streamobjekt, nicht nur für zusammengesetzte Dateispeicher und Datenströme. Die eigenständige Implementierung ist nicht von Verbunddateien abhängig und kann mit jeder Implementierung strukturierter Speicher verwendet werden. Weitere Informationen zur Implementierung von Zusammengesetzten Dateien dieser Schnittstelle finden Sie unter IPropertyStorage-Compound File Implementation.
Einsatzgebiet
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 Eigenschaften-IDs zugeordnet werden können. Andere Methoden unterstützen standardmäßige Commit- und rückgängig machen Speichervorgänge. Es gibt auch eine -Methode, die zeiten festlegt, die dem Eigenschaftenspeicher zugeordnet sind, und eine andere, mit der die Zuweisung einer CLSID verwendet werden kann, um anderen Code, z. B. Benutzeroberflächencode, dem Eigenschaftensatz zuzuordnen. Die Enum-Methode stellt einen Zeiger auf die eigenständige Implementierung von IEnumSTATPROPSTG bereit, die die Eigenschaften im Satz aufzählt.
Eigenschaftensatzformate für Version 0 und Version 1
Die eigenständige Implementierung von IPropertyStorage unterstützt sowohl die Serialisierungsformate der Version 0 als auch die Eigenschaftssatzformate der Version 1. Weitere Informationen finden Sie unter Serialisierung von Eigenschaftensatz. Eigenschaftssätze werden im Format version 0 erstellt und verbleiben in diesem Format, es sei denn, neue Features werden angefordert. Zu diesem Zeitpunkt wird das Format auf Version 1 aktualisiert.
Wenn beispielsweise ein Eigenschaftensatz mit dem flag PROPSETFLAG_DEFAULT erstellt wird, ist sein Format Version 0. Solange Eigenschaftentypen, die dem Format der 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 Eigenschaftssatz nicht mehr von Implementierungen gelesen werden, die nur Version 0 verstehen.
IPropertyStorage und Variant-Typen
Die eigenständige Implementierung von IPropertyStorage unterstützt die Variantentypen VT_UNKNOWN oder VT_DISPATCH im vt-Member der PROPVARIANT-Struktur nicht.
Die folgenden Variantentypen werden in einem SafeArray unterstützt: Das heißt, diese Werte können mit VT_ARRAY im vt-Member der PROPVARIANT-Struktur kombiniert werden.
Variantentypen, die in SafeArray von der Implementierung 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_ERROR
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 entnommen werden, können nicht VT_VARIANT werden und dürfen nicht die Indikatoren VT_VECTOR, VT_ARRAY oder VT_BYREF 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 bereit.
In der vom System bereitgestellten eigenständigen Implementierung führen doppelte Eigenschaftenbezeichner, 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 Betrieb sicherzustellen, wenn dieselbe Stream- oder Speicherwerteigenschaft mehrmals über denselben IPropertyStorage-Zeiger angefordert wird, ist das Öffnen erfolgreich oder schlägt fehl, je nachdem, ob die Eigenschaft bereits geöffnet ist oder nicht, und davon, ob das zugrunde liegende Dateisystem mehrere Öffnungen eines Datenstroms oder Speichers verarbeitet. Daher führt der ReadMultiple-Vorgang für eine Stream- oder Speicherwerteigenschaft immer zu einem Aufruf von IStorage::OpenStream oder IStorage::OpenStorage, wobei die Zugriffs- (z. B. STGM_READWRITE) und Freigabewerte (z. B. STGM_SHARE_EXCLUSIVE) übergeben werden, die angegeben wurden, wenn der Eigenschaftensatz ursprünglich geöffnet oder erstellt wurde.
Wenn die Methode fehlschlägt, sind die in rgvar[] geschriebenen Werte nicht definiert. Wenn einige Stream- oder Speicherwerteigenschaften erfolgreich geöffnet wurden, aber ein Fehler auftritt, bevor die Ausführung abgeschlossen ist, sollten diese Eigenschaften freigegeben werden, bevor die Methode zurückgibt.
-
Schreibt die im rgpspec[]-Array angegebenen Eigenschaften und weist ihnen die in rgvar[] angegebenen PROPVARIANT-Tags und -Werte zu. 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 Eigenschafts-IDs zugeordnet sind.
-
Weist im rglpwstrName-Array angegebene Zeichenfolgennamen Eigenschaften-IDs zu, die im rgpropid-Array angegeben sind.
-
Löscht die Zeichenfolgennamen der im rgpropid-Array angegebenen Eigenschaften-IDs, indem NULL in den Eigenschaftennamen geschrieben wird.
-
Legt die CLSID des Eigenschaftensatzdatenstroms fest. In der eigenständigen Implementierung legt das Festlegen der CLSID für einen nicht einfachen Eigenschaftssatz (einer, der Speicher- oder Streamwerteigenschaften enthalten kann, wie unter IPropertySetStorage::Create beschrieben) auch die CLSID für den zugrunde liegenden Unterspeicher fest, sodass sie über einen Aufruf von IStorage::Stat abgerufen werden kann.
-
Für einfache und nicht einfache Eigenschaftensätze leert das Speicherimage in das Datenträgersubsystem. Darüber hinaus ruft diese Methode für nicht einfache Transacted-Mode-Eigenschaftssätze IStorage::Commit für den Eigenschaftensatz auf.
-
Ruft nur für nichtimple-Eigenschaftssätze die Revert-Methode des zugrunde liegenden Speichers auf und öffnet den "contents"-Stream erneut. Für einfache Eigenschaftssätze gibt nur E_OK zurück.
-
Erstellt ein Enumeratorobjekt, das IEnumSTATPROPSTG implementiert, dessen Methoden aufgerufen werden können, um die STATPROPSTG-Strukturen aufzulisten, die Informationen zu den einzelnen Eigenschaften in der Gruppe bereitstellen.
Diese Implementierung erstellt ein Array, in das der gesamte Eigenschaftssatz gelesen wird und das freigegeben werden kann, wenn IEnumSTATPROPSTG::Clone aufgerufen wird.
-
Füllt die Member einer STATPROPSETSTG-Struktur aus, die Informationen über den Eigenschaftensatz als Ganzes 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 nichtimple-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. Es unterstützt die von der zugrunde liegenden Methode unterstützten Zeiten, z. B. Änderungszeit, Zugriffszeit oder Erstellungszeit.
Zugehörige Themen