221 lines
7.1 KiB
C++
221 lines
7.1 KiB
C++
/*++
|
|
|
|
© 1998 Seagate Software, Inc. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
wsbpstbl.h
|
|
|
|
Abstract:
|
|
|
|
Abstract classes that provides persistence methods.
|
|
|
|
Author:
|
|
|
|
Chuck Bardeen [cbardeen] 29-Oct-1996
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _WSBPSTBL_
|
|
#define _WSBPSTBL_
|
|
|
|
#include "wsbpstrg.h"
|
|
|
|
// The name of the stream that is created when objects are persisted
|
|
// to structured storage files.
|
|
#define WSB_PERSIST_DEFAULT_STREAM_NAME OLESTR("WsbStuff")
|
|
|
|
// The size of the overhead associated with persisting an object.
|
|
#define WSB_PERSIST_BASE_SIZE sizeof(CLSID)
|
|
|
|
// Times used for autosave functionality
|
|
#define DEFAULT_AUTOSAVE_INTERVAL (5 * 60 * 1000) // 5 minutes
|
|
#define MAX_AUTOSAVE_INTERVAL (24 * 60 * 60 * 1000) // 24 hours
|
|
|
|
// Macros to help determine how much space is needed to persist an
|
|
// object or a portion of an object.
|
|
#define WsbPersistSize(a) (WSB_PERSIST_BASE_SIZE + a)
|
|
#define WsbPersistSizeOf(a) (WsbPersistSize(sizeof(a)))
|
|
|
|
/*++
|
|
|
|
Enumeration Name:
|
|
WSB_PERSIST_STATE
|
|
|
|
Description:
|
|
|
|
An enumeration that indicates the state of the persistance object. The
|
|
states actually used depend on the type of persistance which is used.
|
|
|
|
--*/
|
|
typedef enum {
|
|
WSB_PERSIST_STATE_UNINIT = 0, // Uninitialized
|
|
WSB_PERSIST_STATE_NORMAL = 1, // Normal state
|
|
WSB_PERSIST_STATE_NOSCRIBBLE = 2, // No scribble state
|
|
WSB_PERSIST_STATE_RELEASED = 3 // File was released
|
|
} WSB_PERSIST_STATE;
|
|
|
|
|
|
|
|
/*++
|
|
|
|
Class Name:
|
|
|
|
CWsbPersistStream
|
|
|
|
Class Description:
|
|
|
|
An object persistable to/from a stream.
|
|
|
|
This is really an abstract class, but is constructable so that
|
|
other class can delegate to it.
|
|
|
|
--*/
|
|
|
|
class WSB_EXPORT CWsbPersistStream :
|
|
public CComObjectRoot,
|
|
public IPersistStream,
|
|
public IWsbPersistStream
|
|
{
|
|
BEGIN_COM_MAP(CWsbPersistStream)
|
|
COM_INTERFACE_ENTRY(IPersist)
|
|
COM_INTERFACE_ENTRY(IPersistStream)
|
|
COM_INTERFACE_ENTRY(IWsbPersistStream)
|
|
END_COM_MAP()
|
|
|
|
// CComObjectRoot
|
|
public:
|
|
STDMETHOD(FinalConstruct)(void);
|
|
void FinalRelease(void);
|
|
|
|
#if defined(WSB_TRACK_MEMORY)
|
|
ULONG InternalAddRef( );
|
|
ULONG InternalRelease( );
|
|
#endif
|
|
|
|
// IPersistStream
|
|
public:
|
|
STDMETHOD(IsDirty)(void);
|
|
|
|
// IWsbPersistStream
|
|
public:
|
|
STDMETHOD(SetIsDirty)(BOOL bIsDirty);
|
|
|
|
protected:
|
|
BOOL m_isDirty;
|
|
};
|
|
|
|
|
|
/*++
|
|
|
|
Class Name:
|
|
|
|
CWsbPersistable
|
|
|
|
Class Description:
|
|
|
|
A object persistable to/from a stream, storage, or file.
|
|
|
|
This is really an abstract class, but is constructable so that
|
|
other class can delegate to it. CWsbPersistStream should be used
|
|
instead of this class unless storage and/or file persistence is
|
|
absolutely necessary! If the object is persisted as part of a parent
|
|
object, then only the parent object (or its parent) needs to support
|
|
persistence to storage and/or file.
|
|
|
|
--*/
|
|
|
|
class WSB_EXPORT CWsbPersistable :
|
|
public CWsbPersistStream,
|
|
public IPersistFile,
|
|
public IWsbPersistable
|
|
{
|
|
BEGIN_COM_MAP(CWsbPersistable)
|
|
COM_INTERFACE_ENTRY2(IPersist, CWsbPersistStream)
|
|
COM_INTERFACE_ENTRY2(IPersistStream, CWsbPersistStream)
|
|
COM_INTERFACE_ENTRY2(IWsbPersistStream, CWsbPersistStream)
|
|
COM_INTERFACE_ENTRY(IPersistFile)
|
|
COM_INTERFACE_ENTRY(IWsbPersistable)
|
|
END_COM_MAP()
|
|
|
|
// CComObjectRoot
|
|
public:
|
|
STDMETHOD(FinalConstruct)(void);
|
|
void FinalRelease(void);
|
|
|
|
// IPersistFile
|
|
public:
|
|
STDMETHOD(GetCurFile)(LPOLESTR* pszFileName);
|
|
STDMETHOD(Load)(LPCOLESTR pszFileName, DWORD dwMode);
|
|
STDMETHOD(Save)(LPCOLESTR pszFileName, BOOL bRemember);
|
|
STDMETHOD(SaveCompleted)(LPCOLESTR pszFileName);
|
|
|
|
// IWsbPersistStream
|
|
STDMETHOD(IsDirty)(void)
|
|
{ return(CWsbPersistStream::IsDirty()); }
|
|
STDMETHOD(SetIsDirty)(BOOL bIsDirty)
|
|
{ return(CWsbPersistStream::SetIsDirty(bIsDirty)); }
|
|
|
|
// IWsbPersistable
|
|
public:
|
|
STDMETHOD(GetDefaultFileName)(LPOLESTR* pszFileName, ULONG ulBufferSize);
|
|
STDMETHOD(ReleaseFile)(void);
|
|
STDMETHOD(SetDefaultFileName)(LPOLESTR pszFileName);
|
|
|
|
protected:
|
|
WSB_PERSIST_STATE m_persistState;
|
|
CWsbStringPtr m_persistFileName;
|
|
CWsbStringPtr m_persistDefaultName;
|
|
CComPtr<IStorage> m_persistStorage;
|
|
CComPtr<IStream> m_persistStream;
|
|
};
|
|
|
|
|
|
// Persistence Helper Functions
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, BOOL* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, GUID* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, LONG* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, SHORT* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, BYTE* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, UCHAR* pValue, ULONG bufferSize);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, OLECHAR** pValue, ULONG bufferSize);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULONG* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, USHORT* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, LONGLONG* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULONGLONG* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, DATE* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, FILETIME* pValue);
|
|
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULARGE_INTEGER* pValue);
|
|
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, BOOL value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, GUID value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, LONG value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, SHORT value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, BYTE value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, UCHAR* value, ULONG bufferSize);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, OLECHAR* value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULONG value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, USHORT value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, LONGLONG value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULONGLONG value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, DATE value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, FILETIME value);
|
|
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULARGE_INTEGER value);
|
|
|
|
extern WSB_EXPORT HRESULT WsbBstrFromStream(IStream* pStream, BSTR* pValue);
|
|
extern WSB_EXPORT HRESULT WsbBstrToStream(IStream* pStream, BSTR value);
|
|
|
|
extern WSB_EXPORT HRESULT WsbPrintfToStream(IStream* pStream, OLECHAR* fmtString, ...);
|
|
extern WSB_EXPORT HRESULT WsbStreamToFile(HANDLE hFile, IStream* pStream, BOOL AddCR);
|
|
|
|
extern WSB_EXPORT HRESULT WsbSafeCreate(OLECHAR *, IPersistFile* pIPFile);
|
|
extern WSB_EXPORT HRESULT WsbSafeLoad(OLECHAR *, IPersistFile* pIPFile, BOOL UseBackup);
|
|
extern WSB_EXPORT HRESULT WsbSafeSave(IPersistFile* pIPFile);
|
|
extern WSB_EXPORT HRESULT WsbMakeBackupName(OLECHAR* pSaveName, OLECHAR* pExtension,
|
|
OLECHAR** ppBackupName);
|
|
|
|
|
|
#endif // _WSBPSTBL_
|