Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
-
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.
-
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í.
-
Odstraní vlastnosti zadané v rgpspec[].
-
Přečte existující názvy řetězců přidružené k ID vlastností zadaným v poli rgpropid[].
-
Přiřadí názvy řetězců zadané v poli rglpwstrName id vlastností zadaným v poli rgpropid.
-
Odstraní názvy vlastností pro vlastnosti zadané v poli rgpropid[].
-
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.
-
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í.
-
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í .
-
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.
-
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.
-
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ů.
Související témata