|
|
// Stream.h -- Definition for the class CStream
#ifndef __STREAM_H__
#define __STREAM_H__
class CStream : public CITUnknown {
public:
static HRESULT OpenStream(IUnknown *punkOuter, ILockBytes *pLockBytes, DWORD grfMode, IStreamITEx **ppStream );
~CStream(void);
// IUnknown methods:
private:
CStream(IUnknown *pUnkOuter);
class CImpIStream : public IITStreamITEx { public:
CImpIStream(CStream *pBackObj, IUnknown *punkOuter); ~CImpIStream(void);
HRESULT InitOpenStream(ILockBytes *pLockBytes, DWORD grfMode);
// ISequentialStream methods
/* [local] */ HRESULT __stdcall Read( /* [out] */ void __RPC_FAR *pv, /* [in] */ ULONG cb, /* [out] */ ULONG __RPC_FAR *pcbRead); /* [local] */ HRESULT __stdcall Write( /* [size_is][in] */ const void __RPC_FAR *pv, /* [in] */ ULONG cb, /* [out] */ ULONG __RPC_FAR *pcbWritten); // IStream methods:
/* [local] */ HRESULT __stdcall Seek( /* [in] */ LARGE_INTEGER dlibMove, /* [in] */ DWORD dwOrigin, /* [out] */ ULARGE_INTEGER __RPC_FAR *plibNewPosition) ; HRESULT __stdcall SetSize( /* [in] */ ULARGE_INTEGER libNewSize); /* [local] */ HRESULT __stdcall CopyTo( /* [unique][in] */ IStream __RPC_FAR *pstm, /* [in] */ ULARGE_INTEGER cb, /* [out] */ ULARGE_INTEGER __RPC_FAR *pcbRead, /* [out] */ ULARGE_INTEGER __RPC_FAR *pcbWritten); HRESULT __stdcall Commit( /* [in] */ DWORD grfCommitFlags); HRESULT __stdcall Revert( void); HRESULT __stdcall LockRegion( /* [in] */ ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType); HRESULT __stdcall UnlockRegion( /* [in] */ ULARGE_INTEGER libOffset, /* [in] */ ULARGE_INTEGER cb, /* [in] */ DWORD dwLockType); HRESULT __stdcall Stat( /* [out] */ STATSTG __RPC_FAR *pstatstg, /* [in] */ DWORD grfStatFlag); HRESULT __stdcall Clone( /* [out] */ IStream __RPC_FAR *__RPC_FAR *ppstm);
// IStreamITEx methods:
HRESULT STDMETHODCALLTYPE SetDataSpaceName(const WCHAR * pwcsDataSpaceName); HRESULT STDMETHODCALLTYPE GetDataSpaceName( WCHAR **ppwcsDataSpaceName); HRESULT STDMETHODCALLTYPE Flush();
private:
enum { CB_MAX_COPY_SEGMENT = 8192 };
ILockBytes *m_pLockBytes; CULINT m_ullStreamPosition; DWORD m_grfMode;
CITCriticalSection m_cs; };
CImpIStream m_ImpIStream; };
typedef CStream *PCStream;
extern GUID aIID_CStream[];
extern UINT cInterfaces_CStream;
inline CStream::CStream(IUnknown *pUnkOuter) : m_ImpIStream(this, pUnkOuter), CITUnknown(aIID_CStream, cInterfaces_CStream, &m_ImpIStream) { }
inline CStream::~CStream(void) { }
inline CStream::CImpIStream::CImpIStream(CStream *pBackObj, IUnknown *pUnkOuter) : IITStreamITEx(pBackObj, pUnkOuter)
{ m_ullStreamPosition = 0; m_pLockBytes = NULL; }
inline CStream::CImpIStream::~CImpIStream(void) { if (m_pLockBytes) m_pLockBytes->Release(); }
#endif // __STREAM_H__
|