Método IPersistStorage::Save (objidl.h)

Salva um objeto e todos os objetos aninhados que ele contém no objeto de armazenamento especificado. O objeto entra no modo NoScribble.

Sintaxe

HRESULT Save(
  [in] IStorage *pStgSave,
  [in] BOOL     fSameAsLoad
);

Parâmetros

[in] pStgSave

Um ponteiro IStorage para o armazenamento no qual o objeto deve ser salvo.

[in] fSameAsLoad

Indica se o armazenamento especificado é o atual, que foi passado para o objeto por uma das seguintes chamadas: IPersistStorage::InitNew, IPersistStorage::Load ou IPersistStorage::SaveCompleted.

Esse parâmetro é definido como FALSE ao executar uma operação Salvar como ou Salvar uma Cópia para ou ao executar um salvamento completo. No último caso, esse método salva em um arquivo temporário, exclui o arquivo original e renomeia o arquivo temporário.

Esse parâmetro é definido como TRUE para executar um salvamento completo em uma situação de pouca memória ou para executar uma salvação incremental rápida na qual apenas os componentes sujo são salvos.

Retornar valor

Esse método pode retornar os valores a seguir.

Código de retorno Descrição
S_OK
O método foi concluído com sucesso.
STG_E_MEDIUMFULL
O objeto não foi salvo devido à falta de espaço no disco.
E_FAIL
O objeto não pôde ser salvo devido a erros diferentes da falta de espaço em disco.

Comentários

Esse método salva um objeto e todos os objetos aninhados que ele contém no armazenamento especificado. Ele também coloca o objeto no modo NoScribble. Portanto, o objeto não pode gravar em seu armazenamento até que uma chamada subsequente para o método IPersistStorage::SaveCompleted retorne o objeto para o modo Normal.

Se o objeto de armazenamento for o mesmo do qual foi carregado ou criado, a operação de salvamento poderá gravar alterações incrementais no objeto de armazenamento. Caso contrário, um salvamento completo deve ser feito.

Esse método chama recursivamente o método IPersistStorage::Save , a função OleSave ou o método IStorage::CopyTo para salvar seus objetos aninhados.

Esse método não chama o método IStorage::Commit . Também não grava o CLSID no objeto de armazenamento. Ambas as tarefas são responsabilidades do chamador.

Anotações aos Chamadores

Em vez de chamar IPersistStorage::Save diretamente, você normalmente chama a função auxiliar OleSave , que executa as seguintes etapas:
  1. Chame a função WriteClassStg para gravar o identificador de classe do objeto no armazenamento.
  2. Chame o método IPersistStorage::Save .
  3. Se necessário, chame o método IStorage::Commit no objeto de armazenamento.
Em seguida, um aplicativo de contêiner executa todas as outras operações necessárias para concluir o salvamento e chama o método SaveCompleted para cada objeto.

Se um objeto inserido passar o método IPersistStorage::Save para seus objetos aninhados, ele deverá receber uma chamada para seu método IPersistStorage::SaveCompleted antes de chamar esse método para seus objetos aninhados.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho objidl.h

Confira também

Ipersiststorage

OleSave