windows-nt/Source/XPSP1/NT/com/oleutest/perform/common/stream.hxx
2020-09-26 16:20:57 +08:00

97 lines
2.1 KiB
C++

//+-------------------------------------------------------------------
//
// File: stream.hxx
//
// Contents: Stream class on a file.
//
// Classes: CStreamOnFile
//
// History: 08-08-95 Rickhi Created
//
//--------------------------------------------------------------------
#ifndef __STREAMONFILE_HXX__
#define __STREAMONFILE_HXX__
//+-------------------------------------------------------------------
//
// Class: CStreamOnFile
//
// Purpose: Stream wrapper for a flat file.
//
// History: 08-08-95 Rickhi Created
//
//--------------------------------------------------------------------
class CStreamOnFile : public IStream
{
public:
CStreamOnFile(const WCHAR *pwszFileName, SCODE &sc, BOOL fRead);
~CStreamOnFile(void);
STDMETHOD(QueryInterface)(
REFIID iidInterface,
void FAR* FAR* ppvObj);
STDMETHOD_(ULONG,AddRef)(void);
STDMETHOD_(ULONG,Release)(void);
STDMETHOD(Read)(
VOID HUGEP* pv,
ULONG cb,
ULONG FAR* pcbRead);
STDMETHOD(Write)(
VOID const HUGEP* pv,
ULONG cb,
ULONG FAR* pcbWritten);
STDMETHOD(Seek)(
LARGE_INTEGER dlibMove,
DWORD dwOrigin,
ULARGE_INTEGER FAR* plibNewPosition);
STDMETHOD(SetSize) (ULARGE_INTEGER cb);
STDMETHOD(CopyTo)(
IStream FAR* pstm,
ULARGE_INTEGER cb,
ULARGE_INTEGER FAR* pcbRead,
ULARGE_INTEGER FAR* pcbWritten);
STDMETHOD(Commit)(DWORD grfCommitFlags);
STDMETHOD(Revert)(void);
STDMETHOD(LockRegion)(
ULARGE_INTEGER libOffset,
ULARGE_INTEGER cb,
DWORD dwLockType);
STDMETHOD(UnlockRegion)(
ULARGE_INTEGER libOffset,
ULARGE_INTEGER cb,
DWORD dwLockType);
STDMETHOD(Stat)(
STATSTG FAR* pstatstg,
DWORD statflag);
STDMETHOD(Clone)(IStream FAR * FAR *ppstm);
private:
LONG _clRefs; // reference count
HANDLE _hFile; // file handle
BOOL _fRead; // read or write side
LONG _lOffset; // current seek ptr
LONG _cSize; // number of bytes written
ULONG _cbData; // size of data
BYTE *_pbData; // ptr to data
};
#endif // _STREAMONFILE_HXX__