# IPersistMemory::Save

Instructs the object to save its persistent data to the memory pointed to by pvMem where cbSize indicates the amount of memory available at pvMem. The object must not write past the address (BYTE*)((BYTE *)pvMem+cbSize). The fClearDirty flag determines whether the object is to clear its dirty state after the save is complete.

HRESULT Save(

void* pvMem, | //Pointer to the stream where the object is to be saved
BOOL fClearDirty, | //Specifies whether to clear the dirty flag
ULONG cbSize | //Amount of memory to which the object can write its data
); |

Parameters

pvMem
  [in] Pointer to the memory in which the object should save up to cbSize bytes of its data.
fClearDirty
  [in] A flag indicating whether the object should clear its dirty state on return from Save or leave that state as-is.
cbSize
  [in] The amount of memory available at pvMem to which the object can write its data.

Return Values

S_OK
  The object successfully initialized itself.
E_UNEXPECTED
  This method was called before the object was initialized with IPersistMemory::InitNew or IPersistMemory::Load.
E_INVALIDARG
  The number of bytes indicated by cbSize is too small to allow the object to save itself completely.
E_POINTER
  The pointer in pvMem is NULL.

Remarks

Any object that implements IPersistMemory has some information to save persistently, therefore E_NOTIMPL is not a valid return code.

The caller should ideally allocate as many bytes as the object returns from IPersistMemory::GetSizeMax.

See Also

IPersistMemory::InitNew, IPersistMemory::Load