xmemfile.h
上传用户:gnaf34
上传日期:2022-04-22
资源大小:1657k
文件大小:2k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. #if !defined(__xmemfile_h)
  2. #define __xmemfile_h
  3. #include "xfile.h"
  4. //////////////////////////////////////////////////////////
  5. class DLL_EXP CxMemFile : public CxFile
  6. {
  7. public:
  8. CxMemFile(BYTE* pBuffer = NULL, DWORD size = 0)
  9. {
  10. m_pBuffer = pBuffer;
  11. m_Position = 0;
  12. m_Size = m_Edge = size;
  13. m_bFreeOnClose = (bool)(pBuffer==0);
  14. }
  15. //////////////////////////////////////////////////////////
  16. ~CxMemFile()
  17. {
  18. Close();
  19. }
  20. //////////////////////////////////////////////////////////
  21. virtual bool Close()
  22. {
  23. if ( (m_pBuffer) && (m_bFreeOnClose) ){
  24. free(m_pBuffer);
  25. m_pBuffer = NULL;
  26. m_Size = 0;
  27. }
  28. return true;
  29. }
  30. //////////////////////////////////////////////////////////
  31. bool Open()
  32. {
  33. if (m_pBuffer) return false; // Can't re-open without closing first
  34. m_Position = m_Size = m_Edge = 0;
  35. m_pBuffer=(BYTE*)malloc(0);
  36. m_bFreeOnClose = true;
  37. return (m_pBuffer!=0);
  38. }
  39. //////////////////////////////////////////////////////////
  40. BYTE* GetBuffer() { m_bFreeOnClose = false; return m_pBuffer;}
  41. //////////////////////////////////////////////////////////
  42. virtual size_t Read(void *buffer, size_t size, size_t count);
  43. virtual size_t Write(const void *buffer, size_t size, size_t count);
  44. virtual bool Seek(long offset, int origin);
  45. virtual long Tell();
  46. virtual long Size();
  47. virtual bool Flush();
  48. virtual bool Eof();
  49. virtual long Error();
  50. virtual bool PutC(unsigned char c);
  51. virtual long GetC();
  52. protected:
  53. void Alloc(DWORD nBytes);
  54. void Free();
  55. protected:
  56. BYTE* m_pBuffer;
  57. DWORD m_Size;
  58. bool m_bFreeOnClose;
  59. long m_Position; //current position
  60. long m_Edge; //buffer size
  61. };
  62. #endif