Sdílet prostřednictvím


IPropertyStorage –samostatná implementace

Systém poskytovaná samostatná implementace IPropertySetStorage zahrnuje implementaci IPropertyStorage, rozhraní, které čte a zapisuje vlastnosti v úložišti sady vlastností. Rozhraní IPropertySetStorage vytvoří a otevře sady vlastností v úložišti. Rozhraní IEnumSTATPROPSTG a IEnumSTATPROPSETSTG jsou také poskytována v samostatné implementaci.

Pokud chcete získat ukazatel na samostatnou implementaci IPropertyStorage, zavolejte funkci StgCreatePropStg vytvořit novou sadu vlastností nebo StgOpenPropStg. získat ukazatel rozhraní na existující sadu vlastností (nebo volat Create nebo Open metody IPropertySetStorage samostatné implementace).

Samostatná implementace IPropertyStorage vytváří sady vlastností v jakémkoli objektu úložiště nebo datového proudu, nejen ve složených úložištích a datových proudech. Samostatná implementace nezávisí na složených souborech a lze ji použít s jakoukoli implementací strukturovaných úložišť. Další informace o složeného souboru implementace tohoto rozhraní naleznete v tématu IPropertyStorage-Compound Implementace souboru.

Kdy použít

Ke správě vlastností v rámci jedné sady vlastností použijte IPropertyStorage. Jeho metody podporují čtení, zápis a odstraňování vlastností a volitelné názvy řetězců, které lze přidružit k ID vlastností. Jiné metody podporují standardní operace potvrzení a obnovení úložiště. Existuje také metoda, která nastavuje časy spojené s úložištěm vlastností a další, která umožňuje přiřazení CLSID použít k přidružení jiného kódu, například kódu uživatelského rozhraní, k sadě vlastností. Metoda Enum poskytuje ukazatel na samostatnou implementaci IEnumSTATPROPSTG, která vytvoří výčet vlastností v sadě.

Formáty sady vlastností verze 0 a verze 1

Samostatná implementace IPropertyStorage podporuje jak verzi 0, tak i formát serializace sady vlastností 1. Další informace naleznete v tématu Sada vlastností serializace. Sady vlastností se vytvářejí ve formátu verze 0 a zůstávají v daném formátu, pokud nejsou požadovány nové funkce. V té době se formát aktualizuje na verzi 1.

Pokud se například vytvoří sada vlastností s příznakem PROPSETFLAG_DEFAULT, jeho formát je verze 0. Pokud jsou typy vlastností, které odpovídají formátu verze 0, zapsány a načteny z této sady vlastností, zůstane sada vlastností ve formátu verze 0. Pokud je typ vlastnosti verze 1 zapsán do sady vlastností, sada vlastností se automaticky aktualizuje na verzi 1. Následně nelze tuto sadu vlastností číst implementacemi, které rozumí pouze verzi 0.

IPropertyStorage a variantní typy

Samostatná implementace IPropertyStorage nepodporuje typy variant VT_UNKNOWN ani VT_DISPATCH ve vt člen struktury PROPVARIANT.

Následující typy variant jsou podporovány v rámci SafeArray; to znamená, že tyto hodnoty lze kombinovat s VT_ARRAY ve vt člen struktury PROPVARIANT.

Variantní typy podporované v rámci SafeArray implementací složeného souboru IPropertyStorage

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

 

 

Při kombinaci VT_VARIANT s VT_ARRAY obsahuje SafeArray samotné struktury PROPVARIANT. Typy těchto prvků však musí být převzaty z předchozího seznamu, nelze VT_VARIANT a nesmí obsahovat indikátory VT_VECTOR, VT_ARRAY nebo VT_BYREF.

IPropertyStorage – metody

Samostatná implementace IPropertyStorage podporuje následující metody:

IPropertyStorage::ReadMultiple

Přečte vlastnosti zadané v rgpspec pole a poskytuje hodnoty všech platných vlastností v rgvar pole PROPVARIANT prvků.

V zadaném systému samostatná implementace duplicitní identifikátory vlastností, které odkazují na typy datových proudů nebo úložiště, mají za následek několik volání IStorage::OpenStream nebo IStorage::OpenStorage a úspěch nebo selhání ReadMultiple závisí na schopnosti základní implementace úložiště sdílet otevřená úložiště.

Kromě toho, aby se zajistilo, že operace bezpečná pro vlákno, pokud se stejná vlastnost s hodnotou datového proudu nebo úložiště vyžaduje vícekrát prostřednictvím stejného IPropertyStorage ukazatel, otevření proběhne úspěšně nebo selže v závislosti na tom, jestli je vlastnost již otevřená a jestli podkladový systém souborů zpracovává více otevření datového proudu nebo úložiště. Operace ReadMultiple u vlastnosti s hodnotou datového proudu nebo úložiště proto vždy vede k volání IStorage::OpenStreamnebo IStorage::OpenStorage, předání přístupu (například STGM_READWRITE) a hodnot sdílených složek (například STGM_SHARE_EXCLUSIVE) zadaných při původním otevření nebo vytvoření sady vlastností.

Pokud metoda selže, hodnoty zapsané do rgvar[] nejsou definovány. Pokud se některé vlastnosti s hodnotou datového proudu nebo úložiště úspěšně otevřou, ale před dokončením provádění dojde k chybě, měly by být tyto vlastnosti uvolněny před vrácením metody.

IPropertyStorage::WriteMultiple

Zapíše vlastnosti zadané v poli rgpspec[] a přiřadí je propvariant značky a hodnoty zadané v rgvar[]. Vlastnosti, které již existují, jsou přiřazeny zadané PROPVARIANT hodnoty a vlastnosti, které aktuálně neexistují.

IPropertyStorage::D eleteMultiple

Odstraní vlastnosti zadané v rgpspec[].

IPropertyStorage::ReadPropertyNames

Přečte existující názvy řetězců přidružené k ID vlastností zadaným v poli rgpropid[].

IPropertyStorage::WritePropertyNames

Přiřadí názvy řetězců zadané v poli rglpwstrName id vlastností zadaným v poli rgpropid.

IPropertyStorage::D eletePropertyNames

Odstraní názvy řetězců ID vlastností zadaných v poli rgpropid zápisem NULL názvu vlastnosti.

IPropertyStorage::SetClass

Nastaví CLSID datového proudu sady vlastností. V samostatné implementaci nastavení CLSID na nonsimple vlastnost set (jeden, který může obsahovat vlastnosti úložiště nebo stream-valued, jak je popsáno v IPropertySetStorage::Create) také nastaví CLSID na základní podstorage, aby bylo možné získat prostřednictvím volání IStorage::Stat.

IPropertyStorage::Commit

U jednoduchých i neprodyšných sad vlastností vyprázdní image paměti do subsystému disku. Kromě toho, pro nonsimple transacted-mode sady vlastností, tato metoda volá IStorage::Commit v sadě vlastností.

IPropertyStorage::Revert

Pouze pro sady vlastností bezsimple volá metodu Revert podkladového úložiště a znovu otevře datový proud "contents". U jednoduchých sad vlastností vrátí pouze E_OK.

IPropertyStorage::Enum

Vytvoří enumerátor objekt, který implementuje IEnumSTATPROPSTG, metody, které lze volat k výčtu STATPROPSTG struktury, které poskytují informace o každé vlastnosti v sadě.

Tato implementace vytvoří pole, do kterého je načtena celá sada vlastností a která může být sdílena při IEnumSTATPROPSTG::Clone je volána.

IPropertyStorage::Stat

Vyplní členy struktury STATPROPSETSTG, která obsahuje informace o vlastnosti nastavené jako celek. Při návratu poskytuje ukazatel na strukturu.

Pro sady úložišť bezsimple tato implementace volá IStorage::Stat (nebo IStream::Stat) získat informace z podkladového úložiště nebo datového proudu.

IPropertyStorage::SetTimes

Pouze pro sady vlastností bezsimple nastaví časy podporované podkladovým úložištěm. Tato implementace SetTimes volá IStorage::SetElementTimes metodu podkladového úložiště, aby se časy změnily. Podporuje časy podporované podkladovou metodou, která může být změněna čas, doba přístupu nebo čas vytvoření.

IPropertySetStorage–samostatná implementace

IPropertyStorage

IStorage::SetElementTimes

StgOpenPropStg

stgCreatePropStg

stgCreatePropSetStg