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:

IPropertyStorage::ReadMultiple

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.

IPropertyStorage::WriteMultiple

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.

IPropertyStorage::D eleteMultiple

Löscht die in rgpspec[] angegebenen Eigenschaften.

IPropertyStorage::ReadPropertyNames

Liest vorhandene Zeichenfolgennamen, die den im rgpropid[]-Array angegebenen Eigenschafts-IDs zugeordnet sind.

IPropertyStorage::WritePropertyNames

Weist im rglpwstrName-Array angegebene Zeichenfolgennamen Eigenschaften-IDs zu, die im rgpropid-Array angegeben sind.

IPropertyStorage::D eletePropertyNames

Löscht die Zeichenfolgennamen der im rgpropid-Array angegebenen Eigenschaften-IDs, indem NULL in den Eigenschaftennamen geschrieben wird.

IPropertyStorage::SetClass

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.

IPropertyStorage::Commit

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.

IPropertyStorage::Revert

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.

IPropertyStorage::Enum

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.

IPropertyStorage::Stat

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.

IPropertyStorage::SetTimes

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.

Eigenständige IPropertySetStorage-Implementierung

IPropertyStorage

IStorage::SetElementTimes

StgOpenPropStg

StgCreatePropStg

StgCreatePropSetStg