pstream.h.svn-base
来自「ffshow源码」· SVN-BASE 代码 · 共 115 行
SVN-BASE
115 行
//------------------------------------------------------------------------------// File: PStream.h//// Desc: DirectShow base classes - defines a class for persistent properties// of filters.//// Copyright (c) 1992-2002 Microsoft Corporation. All rights reserved.//------------------------------------------------------------------------------#ifndef __PSTREAM__#define __PSTREAM__// Base class for persistent properties of filters// (i.e. filter properties in saved graphs)// The simplest way to use this is:// 1. Arrange for your filter to inherit this class// 2. Implement in your class WriteToStream and ReadFromStream// These will override the "do nothing" functions here.// 3. Change your NonDelegatingQueryInterface to handle IPersistStream// 4. Implement SizeMax to return the number of bytes of data you save.// If you save UNICODE data, don't forget a char is 2 bytes.// 5. Whenever your data changes, call SetDirty()//// At some point you may decide to alter, or extend the format of your data.// At that point you will wish that you had a version number in all the old// saved graphs, so that you can tell, when you read them, whether they// represent the old or new form. To assist you in this, this class// writes and reads a version number.// When it writes, it calls GetSoftwareVersion() to enquire what version// of the software we have at the moment. (In effect this is a version number// of the data layout in the file). It writes this as the first thing in the data.// If you want to change the version, implement (override) GetSoftwareVersion().// It reads this from the file into mPS_dwFileVersion before calling ReadFromStream,// so in ReadFromStream you can check mPS_dwFileVersion to see if you are reading// an old version file.// Normally you should accept files whose version is no newer than the software// version that's reading them.// CPersistStream//// Implements IPersistStream.// See 'OLE Programmers Reference (Vol 1):Structured Storage Overview' for// more implementation information.class CPersistStream : public IPersistStream { private: // Internal state: protected: DWORD mPS_dwFileVersion; // version number of file (being read) BOOL mPS_fDirty; public: // IPersistStream methods STDMETHODIMP IsDirty() {return (mPS_fDirty ? S_OK : S_FALSE);} // note FALSE means clean STDMETHODIMP Load(LPSTREAM pStm); STDMETHODIMP Save(LPSTREAM pStm, BOOL fClearDirty); STDMETHODIMP GetSizeMax(ULARGE_INTEGER * pcbSize) // Allow 24 bytes for version. { pcbSize->QuadPart = 12*sizeof(WCHAR)+SizeMax(); return NOERROR; } // implementation CPersistStream(IUnknown *punk, HRESULT *phr); ~CPersistStream(); HRESULT SetDirty(BOOL fDirty) { mPS_fDirty = fDirty; return NOERROR;} // override to reveal IPersist & IPersistStream // STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv); // --- IPersist --- // You must override this to provide your own class id STDMETHODIMP GetClassID(CLSID *pClsid) PURE; // overrideable if you want // file version number. Override it if you ever change format virtual DWORD GetSoftwareVersion(void) { return 0; } //========================================================================= // OVERRIDE THESE to read and write your data // OVERRIDE THESE to read and write your data // OVERRIDE THESE to read and write your data virtual int SizeMax() {return 0;} virtual HRESULT WriteToStream(IStream *pStream); virtual HRESULT ReadFromStream(IStream *pStream); //========================================================================= private:};// --- Useful helpers ---// Writes an int to an IStream as UNICODE.STDAPI WriteInt(IStream *pIStream, int n);// inverse of WriteIntSTDAPI_(int) ReadInt(IStream *pIStream, HRESULT &hr);#endif // __PSTREAM__
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?