Gestione delle proprietà

Ogni proprietà è costituita da un identificatore di proprietà (univoco all'interno del set di proprietà), da un tag di tipo variant (VT o VarType) che rappresenta il tipo di un valore e il valore stesso. Il tag di tipo variant descrive la rappresentazione dei dati nel valore . Inoltre, a una proprietà può essere assegnato anche un nome stringa che può essere usato per identificare la proprietà, anziché usare l'identificatore di proprietà numerico (ID) richiesto. Per creare e gestire le proprietà, COM definisce l'interfaccia IPropertyStorage .

L'interfaccia IPropertyStorage include metodi per leggere e scrivere matrici di proprietà o nomi di proprietà. L'interfaccia include metodi Commit e Revert simili ai metodi IStorage con lo stesso nome. Sono disponibili metodi di utilità che consentono di impostare l'identificatore di classe (CLSID) del set di proprietà, impostare i tempi associati al set e ottenere statistiche sul set di proprietà. Infine, il metodo Enum crea un enumeratore e restituisce un puntatore alla relativa interfaccia IEnumSTATPROPSTG . È possibile chiamare i metodi di questa interfaccia per enumerare le strutture STATPROPSTG nell'oggetto, che fornirà informazioni su tutte le proprietà nel set di proprietà corrente.

Di seguito è riportato un esempio di come vengono rappresentate le proprietà. Se una proprietà specifica in un set di proprietà contiene il nome scientifico di un animale, tale nome può essere archiviato come stringa con terminazione zero. Archiviato insieme al nome sarebbe un indicatore di tipo per indicare che il valore è una stringa con terminazione zero. Queste proprietà possono avere le caratteristiche seguenti:

ID proprietà Identificatore stringa Indicatore del tipo Valore rappresentato
02 PID_ANIMALNAME VT_LPWSTR Stringa Unicode con terminazione zero
03 PID_LEGCOUNT VT_I2 WORD

 

Qualsiasi applicazione che riconosce il formato del set di proprietà, identificandolo tramite l'identificatore di formato (FMTID), può esaminare la proprietà con un identificatore di PID_ANIMALNAME, determinare che si tratta di una stringa con terminazione zero e leggere e scrivere il valore. Anche se l'applicazione può chiamare IPropertyStorage::ReadMultiple per leggere uno o tutti i set di proprietà (dopo aver ottenuto un puntatore), l'applicazione deve sapere come interpretare il set di proprietà.

Un valore della proprietà viene passato tramite interfacce di proprietà come istanza del tipo PROPVARIANT.

È importante distinguere tra queste proprietà archiviate (persistenti) e le proprietà di runtime. Le costanti valore di tipo varianti hanno nomi che iniziano con VT_. Il set di PROPVARIANT validi, tuttavia, non è completamente equivalente al set di VARIANT usati nei controlli Automazione e ActiveX.

L'unica differenza tra le due strutture è il set consentito di tag VT_ (tipo variante /VarType) in ognuno di essi. Se un determinato tipo di proprietà può essere usato sia in variant che in PROPVARIANT, il tag di tipo (il valore VT_) ha sempre un valore identico. Inoltre, per un determinato valore VT_, la rappresentazione in memoria usata in VARIANTs e PROPVARIANTs è identica. Questo approccio consente al sistema dei tipi di intercettare i tag di tipo non consentiti, consentendo allo stesso tempo a un client esperto di implementare un cast del puntatore quando appropriato.

Per altre informazioni, vedere la sezione Considerazioni sull'archiviazione delle proprietà.