AudRecordLib
AudRecordCLI/DataBufferWrap.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Defines