Partager via


IPersistStorage ::Save, méthode (objidl.h)

Enregistre un objet et tous les objets imbriqués qu’il contient dans l’objet de stockage spécifié. L’objet passe en mode NoScribble.

Syntaxe

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

Paramètres

[in] pStgSave

Pointeur IStorage vers le stockage dans lequel l’objet doit être enregistré.

[in] fSameAsLoad

Indique si le stockage spécifié est le stockage actuel, qui a été passé à l’objet par l’un des appels suivants : IPersistStorage ::InitNew, IPersistStorage ::Load ou IPersistStorage ::SaveCompleted.

Ce paramètre est défini sur FALSE lors de l’exécution d’une opération Enregistrer sous ou Enregistrer une copie dans ou lors d’un enregistrement complet. Dans ce dernier cas, cette méthode enregistre dans un fichier temporaire, supprime le fichier d’origine et renomme le fichier temporaire.

Ce paramètre a la valeur TRUE pour effectuer un enregistrement complet dans une situation de mémoire insuffisante ou pour effectuer un enregistrement incrémentiel rapide dans lequel seuls les composants sale sont enregistrés.

Valeur retournée

Cette méthode peut retourner les valeurs suivantes.

Code de retour Description
S_OK
La commande s'est correctement terminée.
STG_E_MEDIUMFULL
L’objet n’a pas été enregistré en raison d’un manque d’espace sur le disque.
E_FAIL
L’objet n’a pas pu être enregistré en raison d’erreurs autres qu’un manque d’espace disque.

Remarques

Cette méthode enregistre un objet et tous les objets imbriqués qu’il contient dans le stockage spécifié. Il place également l’objet en mode NoScribble. Par conséquent, l’objet ne peut pas écrire dans son stockage tant qu’un appel ultérieur à la méthode IPersistStorage ::SaveCompleted ne retourne pas l’objet en mode Normal.

Si l’objet de stockage est identique à celui à partir duquel il a été chargé ou créé, l’opération d’enregistrement peut être en mesure d’écrire des modifications incrémentielles dans l’objet de stockage. Sinon, un enregistrement complet doit être effectué.

Cette méthode appelle de manière récursive la méthode IPersistStorage ::Save , la fonction OleSave ou la méthode IStorage ::CopyTo pour enregistrer ses objets imbriqués.

Cette méthode n’appelle pas la méthode IStorage ::Commit . Il n’écrit pas non plus le CLSID dans l’objet de stockage. Ces deux tâches sont les responsabilités de l’appelant.

Remarques aux appelants

Au lieu d’appeler IPersistStorage ::Save directement, vous appelez généralement la fonction d’assistance OleSave qui effectue les étapes suivantes :
  1. Appelez la fonction WriteClassStg pour écrire l’identificateur de classe de l’objet dans le stockage.
  2. Appelez la méthode IPersistStorage ::Save .
  3. Si nécessaire, appelez la méthode IStorage ::Commit sur l’objet de stockage.
Ensuite, une application conteneur effectue toutes les autres opérations nécessaires pour effectuer l’enregistrement et appelle la méthode SaveCompleted pour chaque objet.

Si un objet incorporé passe la méthode IPersistStorage ::Save à ses objets imbriqués, il doit recevoir un appel à sa méthode IPersistStorage ::SaveCompleted avant d’appeler cette méthode pour ses objets imbriqués.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête objidl.h

Voir aussi

IPersistStorage

OleSave