IPersistStream::Save method (objidl.h)

Saves an object to the specified stream.


  [in] IStream *pStm,
  [in] BOOL    fClearDirty


[in] pStm

An IStream pointer to the stream into which the object should be saved.

[in] fClearDirty

Indicates whether to clear the dirty flag after the save is complete. If TRUE, the flag should be cleared. If FALSE, the flag should be left unchanged.

Return value

This method can return the following values.

Return code Description
The method completed successfully.
The object could not save itself to the stream. This error could indicate, for example, that the object contains another object that is not serializable to a stream or that an ISequentialStream::Write call returned STG_E_CANTSAVE.
The object could not be saved because there is no space left on the storage device.


IPersistStream::Save saves an object into the specified stream and indicates whether the object should reset its dirty flag.

The seek pointer is positioned at the location in the stream at which the object should begin writing its data. The object calls the ISequentialStream::Write method to write its data.

On exit, the seek pointer must be positioned immediately past the object data. The position of the seek pointer is undefined if an error returns.

Notes to Callers

Rather than calling IPersistStream::Save directly, you typically call the OleSaveToStream helper function which does the following:
  1. Calls GetClassID to get the object's CLSID.
  2. Calls the WriteClassStm function to write the object's CLSID to the stream.
  3. Calls IPersistStream::Save.
If you call these methods directly, you can write other data into the stream after the CLSID before calling IPersistStream::Save.

The OLE-provided implementation of IPersistStream follows this same pattern.

Notes to Implementers

The IPersistStream::Save method does not write the CLSID to the stream. The caller is responsible for writing the CLSID.

The IPersistStream::Save method can read from, write to, and seek in the stream; but it must not seek to a location in the stream before that of the seek pointer on entry.

URL Moniker Notes

Saves an URL moniker to a stream. The binary format of URL moniker is its URL string in Unicode (may be a full or partial URL string, see CreateURLMonikerEx for details). This is represented as a ULONG count of characters followed by that many Unicode characters.


Requirement Value
Minimum supported client Windows 2000 Professional [desktop apps only]
Minimum supported server Windows 2000 Server [desktop apps only]
Target Platform Windows
Header objidl.h

See also