Compartir a través de


Almacenar conjuntos de propiedades

Las aplicaciones pueden exponer algunos de los datos de estado de sus documentos para que otras aplicaciones puedan localizar y leer esos datos. Algunos ejemplos son un conjunto de propiedades que describe el autor, el título y las palabras clave de un documento creado con un procesador de texto o la lista de fuentes usadas en un documento. Esta instalación no está restringida a los documentos; también se puede usar en objetos incrustados. Por lo general, el acceso a los conjuntos de propiedades debe ser a través de las interfaces IPropertySetStorage e IPropertyStorage , pero en esta sección se describe la manera recomendada anteriormente.

Nota

Si almacena un conjunto de propiedades interno en la aplicación, es posible que no desee usar las siguientes instrucciones. Para exponer la propiedad establecida en otras aplicaciones, siga estas instrucciones.

 

Para almacenar una propiedad establecida en un archivo compuesto

  1. Cree una instancia de IStorage o IStream en el mismo nivel de la estructura de almacenamiento que sus flujos de datos. Siga el nombre de la instancia de IStorage o IStream con "\005". Los nombres de flujo y almacenamiento que comienzan por 0x05 están reservados para conjuntos de propiedades comunes que se pueden compartir entre las aplicaciones. Además, las secuencias que comienzan por ese valor están limitadas a 256 KB. Los nombres se pueden seleccionar de nombres y formatos publicados, o asignando la propiedad establecido un FMTID y derivando el nombre del FMTID según las convenciones descritas en Convenciones de nomenclatura de objetos de almacenamiento.
  2. Un conjunto de propiedades se puede almacenar en una sola instancia de IStream o en una instancia de IStorage que contenga varios flujos y almacenamientos. En el caso de una instancia de IStorage , la secuencia contenida denominada Contents es la secuencia principal que contiene valores de propiedad, donde algunos valores pueden ser nombres de otras secuencias o instancias de almacenamiento dentro del almacenamiento para este conjunto de propiedades.
  3. Especifique el CLSID de la clase de objeto que puede mostrar o proporcionar acceso mediante programación a los valores de propiedad. Si no hay ninguna clase de este tipo, el CLSID debe establecerse en el identificador de formato del conjunto de propiedades. Para un conjunto de propiedades que usa una instancia de IStorage , establezca el CLSID de la instancia de IStorage para que sea el mismo que el almacenado en el flujo Contenido o en CLSID_NULL; el valor de una instancia de IStorage recién creada.
  4. Tiene la opción de especificar nombres que se pueden mostrar que forman el contenido del diccionario.

Algunas aplicaciones pueden leer solo implementaciones de conjuntos de propiedades almacenados como instancias de IStream . Las aplicaciones deben escribirse para esperar que un conjunto de propiedades se pueda almacenar en una instancia de IStorage o IStream , a menos que la definición del conjunto de propiedades indique lo contrario. Por ejemplo, la definición del conjunto de propiedades Información de resumen indica que solo se puede almacenar en una instancia de IStream con nombre. En los casos en los que busca un conjunto de propiedades y no sabe si es un almacenamiento o una secuencia, busque primero una instancia de IStream con el nombre del conjunto de propiedades. Si se produce un error, busque una instancia de IStorage .

Para comprender mejor el almacenamiento de conjuntos de propiedades en una implementación de IStorage , supongamos que hay una clase de aplicaciones que editan información sobre animales. En primer lugar, se define un CLSID (CLSID_AnimalApp) para este conjunto de aplicaciones, por lo que pueden indicar que comprenden los conjuntos de propiedades que contienen información de animales (FMTID_AnimalInfo) y otros que contienen información médica (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 = ...

Tenga en cuenta que el CLSID de la interfaz IStorage y ambos conjuntos de propiedades están CLSID_AnimalApp. Esto identifica cualquier aplicación que pueda mostrar o proporcionar acceso mediante programación a estos conjuntos de propiedades. Cualquier aplicación puede leer los datos de los conjuntos de propiedades (el punto subyacente de los conjuntos de propiedades), pero solo las aplicaciones identificadas con el identificador de clase de CLSID_AnimalApp pueden comprender el significado de los datos de los conjuntos de propiedades.