Sdílet prostřednictvím


Implementace souboru IPropertyStorage-Compound

Implementace modelu COM architektury strukturovaného úložiště se nazývá složené soubory. Objekty úložiště, jak jsou implementovány ve složených souborech, zahrnují implementaci IPropertyStorage, rozhraní, které spravuje jednu trvalou sadu vlastností, a IPropertySetStorage, rozhraní, které spravuje skupiny trvalých sad vlastností. Další informace o rozhraní IPropertyStorage naleznete v tématu IPropertyStorage a Aspekty úložiště vlastností.

Pokud chcete získat ukazatel na implementaci složeného souboru IPropertyStorage, zavolejte StgCreateStorageEx vytvořit nový složený soubor objekt nebo StgOpenStorageEx otevřít dříve vytvořený složený objekt souboru. V případě StgCreateStorageExby měl být parametr stgfmt nastaven na STGFMT_STORAGE. V případě StgOpenStorageExby měl být parametr stgfmt nastaven na STGFMT_STORAGE nebo STGFMT_ANY. V obou případech by měl být parametr riid nastaven na IID_IPropertySetStorage. Obě funkce poskytují ukazatel na objekt IPropertySetStorage rozhraní. Voláním metody Create nebo Open rozhraní získáte ukazatel na rozhraní IPropertyStorage, které můžete použít k volání některé z jejích metod.

Alternativní způsob, jak získat ukazatel na implementaci složeného souboru IPropertySetStorage je volat starší StgCreateDocfile a StgOpenStorage funkcí, nebo zadat riid parametr IID_IStorage do funkce StgCreateStorageEx nebo StgOpenStorageEx. V obou případech se vrátí ukazatel na IStorage rozhraní objektu. U trvalých sad vlastností volejte QueryInterface pro rozhraní IPropertySetStorage a zadejte název definovaný hlavičkou pro identifikátor rozhraní (IID) IID_IPropertySetStorage.

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 identifikátorům vlastností. Jiné metody podporují standardní operace potvrzení a obnovení úložiště. Existuje také metoda, která umožňuje nastavit časy spojené s úložištěm vlastností a další, která umožňuje přiřazení CLSID, které lze použít k přidružení jiného kódu, například kódu uživatelského rozhraní, k sadě vlastností. Volání Enum metoda poskytuje ukazatel na implementaci složeného souboru IEnumSTATPROPSTG, což umožňuje vytvořit výčet vlastností v sadě.

Poznámka

Pokud získáte ukazatel na IPropertyStorage voláním StgCreateDocfile, StgCreateStorageEx, StgOpenStorage nebo StgOpenStorageEx v jednoduchém režimu nastavení úložiště, IPropertyStorage metody dodržují pravidla datových proudů jednoduchého režimu. Úložiště sady vlastností je jednoduchý režim, pokud byl získán pro soubor, který byl vytvořen nebo otevřen s příznakem STGM_SIMPLE. V tomto případě není vždy možné zvětšit základní datový proud a není možné nahradit existující vlastnosti většími vlastnostmi. Další informace naleznete v tématu IPropertySetStorage-Compound Implementace souboru.

 

IPropertyStorage a ukládání do mezipaměti

Složená implementace souboru IPropertyStorage ukládá otevřené sady vlastností do mezipaměti za účelem zvýšení výkonu. Výsledkem je, že změny sady vlastností nejsou zapsány do složeného souboru, dokud nebudou volána metody Commit nebo Release (poslední odkaz).

Sady vlastností Jednoduché režimy

Objekt úložiště vlastností je v jednoduchém režimu, pokud je vytvořen z jednoduchého objektu nastavení vlastnosti režimu úložiště. Například objekt úložiště sady vlastností by byl v jednoduchém režimu, pokud byl získán z funkce StgOpenStorageEx s příznakem STGM_SIMPLE nastaveným v parametru grfMode. Všimněte si, že "jednoduchý režim" nesouvisí s "jednoduchými sadami vlastností". Sada vlastností je jednoduchá, pokud je vytvořena voláním IPropertySetStorage::Create s příznakem PROPSETFLAG_NONSIMPLE nastaveným v grfFlags parametru. Další informace o jednoduchých a neprodyšných sadách vlastností najdete v tématu Objekty úložiště a streamu pro sadu vlastností.

Při vytvoření objektu úložiště vlastností jednoduchého režimu neexistují žádná omezení pro jeho použití. Při otevření existujícího objektu úložiště vlastností jednoduchého režimu nelze zvětšit základní objekt datového proudu, který ukládá sadu vlastností. V důsledku toho není vždy možné takové objekt úložiště vlastností upravit, pokud změna vyžaduje větší datový proud.

Formáty sady vlastností

Složená implementace souboru IPropertyStorage podporuje jak verzi 0, tak i formát serializace sady vlastností 1. Formát verze 1 je podporován na počítačích se systémem Windows 2000. 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 takovém případě 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é rozpoznávají pouze verzi 0.

IPropertyStorage a variantní typy

Implementace složeného souboru IPropertyStorage nepodporuje typy variant VT_UNKNOWN ani VT_DISPATCH ve vt člen struktury PROPVARIANT.

Následující tabulka uvádí typy variant, které 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 pomocí implementace 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

Implementace složeného souboru IPropertyStorage podporuje následující metody:

IPropertyStorage::ReadMultiple

Přečte vlastnosti zadané v poli rgpspec a poskytuje hodnoty všech platných vlastností v rgvar pole PROPVARIANTs. V implementaci složeného souboru MODELU COM duplicitní identifikátory vlastností, které odkazují na typy datových proudů nebo úložišť, 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 operace otevření. Protože ve složeném souboru STGM_SHARE_EXCLUSIVE je vynuceno, několik otevřených pokusů selže. Otevření stejného objektu úložiště více než jednou ze stejného nadřazeného úložiště se nepodporuje. Je nutné zadat příznak STGM_SHARE_EXCLUSIVE.

Kromě toho, aby se zajistila operace bezpečná pro vlákno, pokud je stejná vlastnost s hodnotou datového proudu nebo úložiště požadována několikrát prostřednictvím stejného IPropertyStorage ukazatel v implementaci složeného souboru COM, operace otevření proběhne úspěšně nebo selže v závislosti na tom, zda je vlastnost již otevřená a zda základní systém souborů zpracovává více otevření datového proudu nebo úložiště. Proto ReadMultiple operace u vlastnosti s hodnotou datového proudu nebo úložiště vždy vede k volání IStorage::OpenStreamnebo IStorage::OpenStorage, která předává přístup (STGM_READWRITE atd.) a sdílejí příznaky (STGM_SHARE_EXCLUSIVE atd.) zadané při otevření nebo vytvoření původní sady vlastností.

Pokud metoda selže, hodnoty zapsané do rgvar[] nejsou definovány. Pokud se některé vlastnosti hodnotné datovým proudem 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 vydá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. Vytvoří se vlastnosti, které v současné době 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 vlastností pro vlastnosti zadané v poli rgpropid[].

IPropertyStorage::SetClass

Nastaví CLSID datového proudu sady vlastností. V implementaci složeného souboru nastavení CLSID pro nonsimple vlastnost set (jeden, který může právně obsahovat vlastnosti úložiště nebo stream-valued, jak je popsáno v IPropertySetStorage::Create) také nastaví CLSID na podkladové podstorage tak, 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 sady vlastností do podkladového úložiště. Kromě toho pro nonsimple transacted-mode sady vlastností, tato metoda provádí potvrzení (jako v IStorage::Commit) v úložišti, který obsahuje sadu 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í toto rozhraní vždy vrací S_OK. Sady vlastností NonSimple jsou ty, které byly vytvořeny pomocí příznaku PROPSETFLAG_NONSIMPLE v IPropertySetStorage::Create metoda. Další informace najdete v tématu Objekty úložiště a streamu pro sadu vlastností .

IPropertyStorage::Enum

Vytvoří instanci IEnumSTATPROPSTG, metody, které lze volat k vytvoření výčtu STATPROPSTG struktury, které poskytují informace o jednotlivých vlastnostech 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. Změny sady vlastností se neprojeví v otevřené instanci IEnumSTATPROPSTG. Aby se tyto změny zobrazily, musí být vytvořena nová instance tohoto enumerátoru.

IPropertyStorage::Stat

Vyplní členy struktury STATPROPSETSTG, která obsahuje data o sadě vlastností jako celku. Při návratu poskytuje ukazatel na strukturu. V případě sad úložišť bezsimple tato implementace volá IStorage::Stat (nebo IStream::Stat), aby získala časy z podkladového úložiště nebo datového proudu. U jednoduchých sad úložiště se neudržují žádné časy.

IPropertyStorage::SetTimes

Pouze pro sady vlastností bezsimple nastaví časy podporované podkladovým úložištěm. Implementace složeného úložiště souborů podporuje všechny tři: úpravy, přístup a vytvoření. Tato implementace SetTimes volá IStorage::SetElementTimes metodu základního úložiště k načtení těchto časů.

IPropertyStorage

IStorage::SetElementTimes