Archiviazione di set di proprietà
Le applicazioni possono esporre alcuni dei dati sullo stato dei documenti in modo che altre applicazioni possano individuare e leggere tali dati. Alcuni esempi sono un set di proprietà che descrive l'autore, il titolo e le parole chiave di un documento creato con un elaboratore di parole o l'elenco di tipi di carattere usati in un documento. Questa struttura non è limitata ai documenti; può essere usato anche sugli oggetti incorporati. In genere, l'accesso ai set di proprietà deve essere tramite le interfacce IPropertySetStorage e IPropertyStorage , ma questa sezione descrive il modo consigliato in precedenza.
Nota
Se si archivia un set di proprietà interno all'applicazione, potrebbe non essere necessario usare le linee guida seguenti. Per esporre la proprietà impostata su altre applicazioni, seguire queste linee guida.
Per archiviare una proprietà impostata in un file composto
- Creare un'istanza IStorage o IStream nello stesso livello della struttura di archiviazione dei flussi di dati. Seguire il nome dell'istanza IStorage o IStream con "\005". I nomi di flusso e archiviazione che iniziano con 0x05 sono riservati ai set di proprietà comuni che possono essere condivisi tra le applicazioni. Inoltre, i flussi che iniziano con tale valore sono limitati a 256 KB. I nomi possono essere selezionati da nomi e formati pubblicati oppure assegnando la proprietà imposta un FMTID e derivando il nome dall'FMTID in base alle convenzioni descritte in Convenzioni di denominazione degli oggetti di archiviazione.
- Un set di proprietà può essere archiviato in una singola istanza IStream o in un'istanza di IStorage contenente più flussi e archiviazioni. Nel caso di un'istanza di IStorage , il flusso contenuto denominato Content è il flusso primario contenente i valori delle proprietà, in cui alcuni valori possono essere nomi di altri flussi o istanze di archiviazione all'interno dell'archiviazione per questo set di proprietà.
- Specificare CLSID della classe oggetto che può visualizzare o fornire l'accesso a livello di codice ai valori delle proprietà. Se non esiste una classe di questo tipo, clSID deve essere impostato sull'identificatore di formato del set di proprietà. Per un set di proprietà che usa un'istanza IStorage , impostare CLSID dell'istanza IStorage come quella archiviata nel flusso Contenuto o su CLSID_NULL; valore in un'istanza di IStorage appena creata.
- È possibile specificare nomi visualizzabili che formano il contenuto del dizionario.
Alcune applicazioni possono leggere solo implementazioni di set di proprietà archiviati come istanze IStream . Le applicazioni devono essere scritte per prevedere che un set di proprietà possa essere archiviato in un'istanza IStorage o IStream , a meno che la definizione del set di proprietà non indichi altrimenti. Ad esempio, la definizione del set di proprietà Summary Information indica che può essere archiviata solo in un'istanza IStream denominata. Nei casi in cui si sta cercando un set di proprietà e non si sa se è un archivio o un flusso, cercare un'istanza IStream con il nome del set di proprietà. In caso contrario, cercare un'istanza di IStorage .
Per comprendere meglio i set di proprietà di archiviazione in un'implementazione IStorage , si supponga che esista una classe di applicazioni che modificano le informazioni sugli animali. Prima di tutto, un CLSID (CLSID_AnimalApp) è definito per questo set di applicazioni, in modo che possano indicare che i set di proprietà che contengono informazioni sugli animali (FMTID_AnimalInfo) e altri che contengono informazioni mediche (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 = ...
Tenere presente che clSID dell'interfaccia IStorage e entrambi i set di proprietà sono CLSID_AnimalApp. In questo modo viene identificata qualsiasi applicazione che può visualizzare e/o fornire l'accesso a livello di codice a questi set di proprietà. Qualsiasi applicazione può leggere i dati all'interno dei set di proprietà (set di proprietà point behind), ma solo le applicazioni identificate con l'identificatore di classe di CLSID_AnimalApp possono comprendere il significato dei dati nei set di proprietà.