Speichern von Eigenschaftensätzen
Anwendungen können einige der Zustandsdaten ihrer Dokumente verfügbar machen, damit andere Anwendungen diese Daten suchen und lesen können. Einige Beispiele sind ein Eigenschaftensatz, der den Autor, Titel und Schlüsselwörter eines Dokuments beschreibt, das mit einem Textprozessor erstellt wurde, oder die Liste der in einem Dokument verwendeten Schriftarten. Diese Einrichtung ist nicht auf Dokumente beschränkt. sie kann auch für eingebettete Objekte verwendet werden. Im Allgemeinen sollte der Zugriff auf Eigenschaftensätze über die Schnittstellen IPropertySetStorage und IPropertyStorage möglich sein. In diesem Abschnitt wird jedoch die zuvor empfohlene Methode beschrieben.
Hinweis
Wenn Sie einen Eigenschaftensatz speichern, der für Ihre Anwendung intern ist, sollten Sie die folgenden Richtlinien nicht befolgen. Befolgen Sie diese Richtlinien, um Ihren Eigenschaftensatz für andere Anwendungen verfügbar zu machen.
So speichern Sie einen Eigenschaftensatz in einer Verbunddatei
- Erstellen Sie eine IStorage- oder IStream-Instanz auf derselben Ebene der Speicherstruktur wie ihre Datenströme. Folgen Sie dem Namen Ihrer IStorage- oder IStream-Instanz mit \ "005". Stream- und Speichernamen, die mit 0x05, sind für allgemeine Eigenschaftensätze reserviert, die von anwendungen gemeinsam genutzt werden können. Außerdem sind Streams, die mit diesem Wert beginnen, auf 256 KB beschränkt. Die Namen können entweder aus veröffentlichten Namen und Formaten ausgewählt werden, oder indem der -Eigenschaft ein FMTID zugewiesen und der Name von der FMTID gemäß den in Storage-Objektbenennungskonventionen beschriebenen Konventionen ableitungwird.
- Ein Eigenschaftensatz kann in einer einzelnen IStream-Instanz oder in einer IStorage-Instanz gespeichert werden, die mehrere Streams und Speicher enthält. Im Fall einer IStorage-Instanz ist der enthaltene Stream mit dem Namen Contents der primäre Stream mit Eigenschaftswerten, wobei einige Werte Namen anderer Streams oder Speicherinstanzen innerhalb des Speichers für diesen Eigenschaftensatz sein können.
- Geben Sie die CLSID der Objektklasse an, die programmgesteuerten Zugriff auf die Eigenschaftswerte anzeigen oder bereitstellen kann. Wenn keine solche Klasse verfügbar ist, sollte die CLSID auf den Formatbezeichner des Eigenschaftensets festgelegt werden. Legen Sie für einen Eigenschaftensatz, der eine IStorage-Instanz verwendet, entweder die CLSID der IStorage-Instanz so fest, dass sie mit der im Contents-Stream gespeicherten identisch ist, oder auf CLSID _ NULL; den Wert in einer neu erstellten IStorage-Instanz.
- Sie haben die Möglichkeit, anzeigebare Namen anzugeben, die den Inhalt des Wörterbuchs bilden.
Einige Anwendungen können nur Implementierungen von Eigenschaftensätzen lesen, die als IStream-Instanzen gespeichert sind. Anwendungen sollten so geschrieben werden, dass erwartet wird, dass ein Eigenschaftensatz entweder in einer IStorage- oder IStream-Instanz gespeichert werden kann, es sei denn, die Definition des Eigenschaftensets gibt etwas anderes an. Beispielsweise gibt die Definition des Eigenschaftssatzes Zusammenfassungsinformationen an, dass sie nur in einer benannten IStream-Instanz gespeichert werden kann. In Fällen, in denen Sie nach einem Eigenschaftensatz suchen und nicht wissen, ob es sich um einen Speicher oder Stream handelt, suchen Sie zuerst nach einer IStream-Instanz mit ihrem Eigenschaftensatznamen. Wenn dies fehlschlägt, suchen Sie nach einer IStorage-Instanz.
Um das Speichern von Eigenschaftensätzen in einer IStorage-Implementierung besser zu verstehen, nehmen wir an, dass es eine Klasse von Anwendungen gibt, die Informationen zu Haustieren bearbeiten. Zunächst wird eine CLSID (CLSID TierApp) für diese Gruppe von Anwendungen definiert, sodass sie angeben können, dass sie Eigenschaftensätze verstehen, die Tierinformationen _ enthalten (FMTID-Tierinfo _) und andere, die medizinische Informationen enthalten (FMTID _ MedicalInfo).
IStorage (File): "C:\OLE\REVO.DOC"
IStorage: "\005AnimalInfo", CLSID = CLSID_AnimalApp
IStream: "Contents"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = FMTID_AnimalInfo
Property: Type = PID_ANIMALTYPE, Type = VT_LPWSTR,
Value = L"Dog"
Property: Type = PID_ANIMALNAME, Type = VT_LPWSTR,
Value = L"Revo"
Property: Type = PID_MEDICALHISTORY, Type = VT_STREAMED_OBJECT,
Value = "MedicalInfo"
...
IStream: "MedicalInfo"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = CLSID_MedicalInfo
Property: Type = PID_VETNAME, Type = VT_LPWSTR,
Value = L"Dr. Woof"
Property: Type = PID_LASTEXAM, Type = VT_DATE, Value = ...
Beachten Sie, dass die CLSID der IStorage-Schnittstelle und beide Eigenschaftensätze CLSID _ TierApp sind. Dadurch wird jede Anwendung identifiziert, die diese Eigenschaftensätze anzeigen und/oder programmgesteuerten Zugriff bereitstellen kann. Jede Anwendung kann die Daten in den Eigenschaftensätzen lesen (der Punkt hinter Eigenschaftensätzen), aber nur Anwendungen, die mit dem Klassenbezeichner CLSID Tierapp identifiziert werden, können die Bedeutung der Daten in den Eigenschaftensätzen _ verstehen.