Compartilhar via


Armazenando conjuntos de propriedades

Os aplicativos podem expor alguns dos dados de estado de seus documentos para que outros aplicativos possam localizar e ler esses dados. Alguns exemplos são um conjunto de propriedades que descreve o autor, o título e as palavras-chave de um documento criado com um processador de palavras ou a lista de fontes usadas em um documento. Essa instalação não está restrita a documentos; ele também pode ser usado em objetos inseridos. Em geral, o acesso aos conjuntos de propriedades deve ser por meio das interfaces IPropertySetStorage e IPropertyStorage , mas esta seção descreve a maneira recomendada anteriormente.

Observação

Se estiver armazenando um conjunto de propriedades interno para seu aplicativo, talvez você não queira usar as diretrizes a seguir. Para expor seu conjunto de propriedades a outros aplicativos, siga estas diretrizes.

 

Para armazenar um conjunto de propriedades em um arquivo composto

  1. Crie uma instância IStorage ou IStream no mesmo nível da estrutura de armazenamento que seus fluxos de dados. Siga o nome da instância IStorage ou IStream com "\005". Nomes de fluxo e armazenamento que começam com 0x05 são reservados para conjuntos de propriedades comuns que podem ser compartilhados entre aplicativos. Além disso, os fluxos que começam com esse valor são limitados a 256 KB. Os nomes podem ser selecionados entre nomes e formatos publicados ou atribuindo à propriedade um FMTID e derivando o nome do FMTID de acordo com as convenções descritas em Convenções de Nomenclatura de Objeto de Armazenamento.
  2. Um conjunto de propriedades pode ser armazenado em uma única instância IStream ou em uma instância IStorage que contém vários fluxos e armazenamentos. No caso de uma instância IStorage , o fluxo contido chamado Contents é o fluxo primário que contém valores de propriedade, em que alguns valores podem ser nomes de outros fluxos ou instâncias de armazenamento dentro do armazenamento para esse conjunto de propriedades.
  3. Especifique o CLSID da classe de objeto que pode exibir ou fornecer acesso programático aos valores da propriedade. Se não houver essa classe, o CLSID deverá ser definido como o identificador de formato do conjunto de propriedades. Para um conjunto de propriedades que usa uma instância IStorage , defina o CLSID da instância do IStorage como o mesmo armazenado no fluxo de conteúdo ou para CLSID_NULL; o valor em uma instância IStorage recém-criada.
  4. Você tem a opção de especificar nomes exibicionáveis que formam o conteúdo do dicionário.

Alguns aplicativos podem ler apenas implementações de conjuntos de propriedades armazenados como instâncias IStream . Os aplicativos devem ser gravados para esperar que um conjunto de propriedades possa ser armazenado em uma instância IStorage ou IStream , a menos que a definição do conjunto de propriedades indique o contrário. Por exemplo, a definição do conjunto de propriedades Informações de Resumo afirma que ela só pode ser armazenada em uma instância IStream nomeada. Nos casos em que você está procurando um conjunto de propriedades e não sabe se é um armazenamento ou fluxo, procure uma instância IStream com o nome do conjunto de propriedades primeiro. Se isso falhar, procure uma instância IStorage .

Para entender melhor o armazenamento de conjuntos de propriedades em uma implementação de IStorage , suponha que haja uma classe de aplicativos que editam informações sobre animais. Primeiro, um CLSID (CLSID_AnimalApp) é definido para esse conjunto de aplicativos, para que eles possam indicar que entendem conjuntos de propriedades que contêm informações de animais (FMTID_AnimalInfo) e outros que contêm informações médicas (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 = ...

Lembre-se de que o CLSID da interface IStorage e ambos os conjuntos de propriedades são CLSID_AnimalApp. Isso identifica qualquer aplicativo que possa exibir e/ou fornecer acesso programático a esses conjuntos de propriedades. Qualquer aplicativo pode ler os dados dentro dos conjuntos de propriedades (o ponto por trás dos conjuntos de propriedades), mas somente aplicativos identificados com o identificador de classe de CLSID_AnimalApp podem entender o significado dos dados nos conjuntos de propriedades.