AudRecordLib
|
00001 00006 #ifndef AUDRECORDCLI_DATABUFFERWRAP_H 00007 #define AUDRECORDCLI_DATABUFFERWRAP_H 00008 00009 #pragma once 00010 00011 using namespace System::Runtime::InteropServices; 00012 00013 namespace AudRecordCLI 00014 { 00018 public interface struct IDataBuffer 00019 { 00020 public: 00026 virtual IntPtr GetBuffer() = 0; 00034 virtual IntPtr GetBufferAndLength([Out] DWORD% length) = 0; 00039 virtual DWORD GetLength() = 0; 00044 virtual DWORD GetMaxLength() = 0; 00049 virtual void SetLength(DWORD newUsedLength) = 0; 00050 }; 00051 } 00052 00057 ref class NativeDataBufferWrap : public AudRecordCLI::IDataBuffer 00058 { 00059 private: 00061 INSSBuffer* pNSBuffer; 00063 Object^ interfaceWrap; 00064 public: 00065 NativeDataBufferWrap(INSSBuffer* pBuffer); 00066 virtual IntPtr GetBuffer(); 00067 virtual IntPtr GetBufferAndLength([Out] DWORD% length); 00068 virtual DWORD GetLength(); 00069 virtual DWORD GetMaxLength(); 00070 virtual void SetLength(DWORD newLength); 00071 }; 00072 00078 class ManagedDataBufferWrap : public INSSBuffer 00079 { 00080 private: 00082 gcroot<AudRecordCLI::IDataBuffer^> pDataBuffer; 00084 LONG refCount; 00085 public: 00086 ManagedDataBufferWrap(AudRecordCLI::IDataBuffer^ pBuffer); 00087 // IUnknown 00088 STDMETHODIMP QueryInterface(REFIID riid, PVOID* ppv); 00089 STDMETHODIMP_(ULONG) AddRef(); 00090 STDMETHODIMP_(ULONG) Release(); 00091 // INSSBuffer 00092 STDMETHODIMP GetLength(DWORD* pLength); 00093 STDMETHODIMP SetLength(DWORD newLength); 00094 STDMETHODIMP GetMaxLength(DWORD* pMaxLen); 00095 STDMETHODIMP GetBuffer(BYTE** ppBuffer); 00096 STDMETHODIMP GetBufferAndLength(BYTE** ppDataBuffer, DWORD* pLength); 00097 }; 00098 00099 AudRecordCLI::IDataBuffer^ WrapNativeBuffer(INSSBuffer* pBuffer); 00100 INSSBuffer* WrapManagedBuffer(AudRecordCLI::IDataBuffer^ pBuffer); 00101 00104 #endif