Condividi tramite


Metodo IPersistStorage::Save (objidl.h)

Salva un oggetto e tutti gli oggetti annidati contenuti nell'oggetto di archiviazione specificato. L'oggetto entra in modalità NoScribble.

Sintassi

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

Parametri

[in] pStgSave

Puntatore IStorage all'archiviazione in cui deve essere salvato l'oggetto.

[in] fSameAsLoad

Indica se l'archiviazione specificata è quella corrente, passata all'oggetto da una delle chiamate seguenti: IPersistStorage::InitNew, IPersistStorage::Load o IPersistStorage::SaveCompleted.

Questo parametro è impostato su FALSE quando si esegue un'operazione Salva con nome o Salva copia in o quando si esegue un salvataggio completo. In quest'ultimo caso, questo metodo salva in un file temporaneo, elimina il file originale e rinomina il file temporaneo.

Questo parametro è impostato su TRUE per eseguire un salvataggio completo in una situazione di memoria ridotta o per eseguire un salvataggio incrementale rapido in cui vengono salvati solo i componenti sporchi.

Valore restituito

Questo metodo può restituire i valori seguenti.

Codice restituito Descrizione
S_OK
Metodo completato correttamente.
STG_E_MEDIUMFULL
L'oggetto non è stato salvato a causa di una mancanza di spazio sul disco.
E_FAIL
Impossibile salvare l'oggetto a causa di errori diversi da una mancanza di spazio su disco.

Commenti

Questo metodo salva un oggetto e tutti gli oggetti annidati che contiene, nell'archiviazione specificata. Inserisce anche l'oggetto in modalità NoScribble. Pertanto, l'oggetto non può scrivere nella relativa risorsa di archiviazione finché una chiamata successiva al metodo IPersistStorage::SaveCompleted restituisce l'oggetto in modalità Normal.

Se l'oggetto di archiviazione è uguale a quello da cui è stato caricato o creato, l'operazione di salvataggio può essere in grado di scrivere modifiche incrementali all'oggetto di archiviazione. In caso contrario, è necessario eseguire un salvataggio completo.

Questo metodo chiama in modo ricorsivo il metodo IPersistStorage::Save , la funzione OleSave o il metodo IStorage::CopyTo per salvare gli oggetti annidati.

Questo metodo non chiama il metodo IStorage::Commit . Né scrive CLSID nell'oggetto di archiviazione. Entrambe queste attività sono le responsabilità del chiamante.

Note ai chiamanti

Anziché chiamare IPersistStorage::Save direttamente, in genere si chiama la funzione helper OleSave che esegue la procedura seguente:
  1. Chiamare la funzione WriteClassStg per scrivere l'identificatore di classe per l'oggetto nell'archivio.
  2. Chiamare il metodo IPersistStorage::Save .
  3. Se necessario, chiamare il metodo IStorage::Commit nell'oggetto di archiviazione.
Un'applicazione contenitore esegue quindi tutte le altre operazioni necessarie per completare il salvataggio e chiama il metodo SaveCompleted per ogni oggetto.

Se un oggetto incorporato passa il metodo IPersistStorage::Save agli oggetti annidati, deve ricevere una chiamata al metodo IPersistStorage::SaveCompleted prima di chiamare questo metodo per gli oggetti annidati.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione objidl.h

Vedi anche

IPersistStorage

OleSave