Persistência
Um controle implementa uma ou mais de várias interfaces de persistência para oferecer suporte à persistência de seu estado. Por exemplo, a interface IPersistStreamInit oferece suporte à persistência baseada em fluxo do estado do controle. IPersistStreamInit é um substituto para IPersistStream e adiciona um método de inicialização, InitNew. Os outros métodos são os mesmos em ambas as interfaces. IPersistStreamInit não é derivado de IPersistStream, um objeto suporta apenas uma das duas interfaces com base na capacidade de inicializar novas instâncias de si mesmo.
Outras interfaces de persistência que um controle pode oferecer incluem: IPersistStorage, IPersistMemory, IPersistPropertyBag, IPersistMoniker. O implementador de controle deve decidir quais tipos de persistência são mais importantes e implementar as interfaces de persistência apropriadas. O implementador de controle também decide o que salvar. Por exemplo, um controle pode salvar os valores atuais de suas propriedades ou seu local e tamanho dentro de seu contêiner. O cliente decide qual interface prefere usar.
Antes de carregar um controle de seu estado persistente, um cliente pode verificar o sinalizador OLEMISC_SETCLIENTSITEFIRST para determinar se o controle oferece suporte à obtenção de suas propriedades de site cliente e ambiente antes de carregar seu estado persistente. Essa otimização pode economizar tempo ao instanciar um controle, já que o controle fica livre para ignorar seus valores persistentes em vez de carregá-los apenas para substituí-los pelas propriedades de ambiente fornecidas pelo cliente.
Um controle também pode oferecer suporte a salvar e restaurar seu estado em um conjunto de propriedades OLE, um conjunto de identificadores e valores em um formato especificado. Esse recurso pode ser útil com contêineres como o Visual Basic, que salva seus programas em uma forma textual. Um controle que deseja oferecer suporte a esse recurso implementa IDataObject::GetData e IDataObject::SetData para passar seus valores de propriedade de e para o contêiner, respectivamente. É trabalho do contêiner converter essas informações em texto e salvá-las. Os identificadores usados pelo controle correspondem aos nomes de propriedade do controle e aos valores. Consulte o OLE CDK para obter a definição deste conjunto de propriedades.