|
|
// avifps.h - AVIStream proxy / stub header
#include <ole2.h>
#ifdef CHICAGO
#include "coguid.h"
#endif
#include <cobjps.h>
#ifndef WIN32
#include "olepriv.h"
#endif
enum { IAVISTREAM_Create = 0, IAVISTREAM_Info, IAVISTREAM_FindSample, IAVISTREAM_ReadFormat, IAVISTREAM_SetFormat, IAVISTREAM_Read, IAVISTREAM_Write, IAVISTREAM_Delete, IAVISTREAM_ReadData, IAVISTREAM_WriteData, IAVISTREAM_Reserved1, IAVISTREAM_Reserved2, IAVISTREAM_Reserved3, IAVISTREAM_Reserved4, IAVISTREAM_Reserved5, IAVISTREAM_SetInfo };
// interface proxy for IAVIStream; always aggregated
class FAR CPrxAVIStream : public IAVIStream { public: static IRpcProxyBuffer FAR* Create(IUnknown FAR* pUnkOuter);
// IUnknown methods (for external interface(s))
STDMETHOD(QueryInterface) ( REFIID iid, LPVOID FAR* ppvObj); STDMETHOD_(ULONG,AddRef) (void); STDMETHOD_(ULONG,Release) (void);
// IAVIStream methods
STDMETHOD(Create) (THIS_ LPARAM lParam1, LPARAM lParam2); STDMETHOD(Info) (THIS_ AVISTREAMINFO FAR * psi, LONG lSize); STDMETHOD_(LONG, FindSample)(THIS_ LONG lPos, LONG lFlags); STDMETHOD(ReadFormat) (THIS_ LONG lPos, LPVOID lpFormat, LONG FAR *lpcbFormat); STDMETHOD(SetFormat) (THIS_ LONG lPos, LPVOID lpFormat, LONG cbFormat); STDMETHOD(Read) (THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, LONG FAR * plBytes, LONG FAR * plSamples); STDMETHOD(Write) (THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG FAR *plSampWritten, LONG FAR *plBytesWritten); STDMETHOD(Delete) (THIS_ LONG lStart, LONG lSamples); STDMETHOD(ReadData) (THIS_ DWORD fcc, LPVOID lp, LONG FAR *lpcb); STDMETHOD(WriteData) (THIS_ DWORD fcc, LPVOID lp, LONG cb); #ifdef WIN32
STDMETHODIMP SetInfo(AVISTREAMINFO FAR *lpInfo, LONG cbInfo); #else
STDMETHOD(Reserved1) (THIS); STDMETHOD(Reserved2) (THIS); STDMETHOD(Reserved3) (THIS); STDMETHOD(Reserved4) (THIS); STDMETHOD(Reserved5) (THIS); #endif
private: CPrxAVIStream(IUnknown FAR* pUnkOuter); ~CPrxAVIStream();
// IRpcProxyBuffer which is also the controlling unknown
struct CProxyImpl : IRpcProxyBuffer { public: CProxyImpl(CPrxAVIStream FAR* pPrxAVIStream) { m_pPrxAVIStream = pPrxAVIStream; }
STDMETHOD(QueryInterface)(REFIID iid, LPVOID FAR* ppv); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void);
STDMETHOD(Connect)(IRpcChannelBuffer FAR* pRpcChannelBuffer); STDMETHOD_(void, Disconnect)(void);
private: CPrxAVIStream FAR* m_pPrxAVIStream; }; friend CProxyImpl;
CProxyImpl m_Proxy;
// private state:
ULONG m_refs; IUnknown FAR* m_pUnkOuter; IRpcChannelBuffer FAR* m_pRpcChannelBuffer; AVISTREAMINFO m_sh; };
// interface stub for IAVIStream
class FAR CStubAVIStream : public IRpcStubBuffer { public: static HRESULT Create(IUnknown FAR* pUnkObject, IRpcStubBuffer FAR* FAR* ppStub);
STDMETHOD(QueryInterface) (REFIID iid, LPVOID FAR* ppv); STDMETHOD_(ULONG,AddRef) (void); STDMETHOD_(ULONG,Release) (void);
STDMETHOD(Connect)(IUnknown FAR* pUnkObject); STDMETHOD_(void, Disconnect)(void); STDMETHOD(Invoke)(RPCOLEMESSAGE FAR *pMessage, IRpcChannelBuffer FAR *pChannel); STDMETHOD_(IRpcStubBuffer FAR *, IsIIDSupported)(REFIID iid); STDMETHOD_(ULONG, CountRefs)(void); STDMETHOD(DebugServerQueryInterface)(LPVOID FAR *ppv); STDMETHOD_(void, DebugServerRelease)(LPVOID pv);
private: CStubAVIStream(void); ~CStubAVIStream(void);
ULONG m_refs;
IAVIStream FAR* m_pAVIStream; };
// Proxy/Stub Factory for pssamp.dll: supports IPSFactory only.
class FAR CPSFactory : public IPSFactoryBuffer { public: CPSFactory();
STDMETHOD(QueryInterface)(REFIID iid, LPVOID FAR* ppv); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void);
STDMETHOD(CreateProxy)(IUnknown FAR* pUnkOuter, REFIID iid, IRpcProxyBuffer FAR* FAR* ppProxy, LPVOID FAR* ppv); STDMETHOD(CreateStub)(REFIID iid, IUnknown FAR* pUnkServer, IRpcStubBuffer FAR* FAR* ppStub);
private: ULONG m_refs; };
DEFINE_AVIGUID(CLSID_AVIStreamPS, 0x0002000D, 0, 0);
enum { IAVIFILE_Open = 0, IAVIFILE_Info, IAVIFILE_GetStream, IAVIFILE_CreateStream, IAVIFILE_Save, IAVIFILE_ReadData, IAVIFILE_WriteData, IAVIFILE_EndRecord, IAVIFILE_Reserved1, IAVIFILE_Reserved2, IAVIFILE_Reserved3, IAVIFILE_Reserved4, IAVIFILE_Reserved5 };
// interface proxy for IAVIFile; always aggregated
class FAR CPrxAVIFile : public IAVIFile { public: static IRpcProxyBuffer FAR* Create(IUnknown FAR* pUnkOuter);
// IUnknown methods (for external interface(s))
STDMETHOD(QueryInterface) ( REFIID iid, LPVOID FAR* ppvObj); STDMETHOD_(ULONG,AddRef) (void); STDMETHOD_(ULONG,Release) (void);
// IAVIFile methods
#ifndef WIN32
STDMETHOD(Open) (THIS_ LPCTSTR szFile, UINT mode); #endif
STDMETHOD(Info) (THIS_ AVIFILEINFO FAR * pfi, LONG lSize); STDMETHOD(GetStream) (THIS_ PAVISTREAM FAR * ppStream, DWORD fccType, LONG lParam); STDMETHOD(CreateStream) (THIS_ PAVISTREAM FAR * ppStream, AVISTREAMINFO FAR * psi); #ifndef WIN32
STDMETHOD(Save) (THIS_ LPCTSTR szFile, AVICOMPRESSOPTIONS FAR *lpOptions, AVISAVECALLBACK lpfnCallback); #endif
STDMETHOD(WriteData) (THIS_ DWORD ckid, LPVOID lpData, LONG cbData); STDMETHOD(ReadData) (THIS_ DWORD ckid, LPVOID lpData, LONG FAR *lpcbData); STDMETHOD(EndRecord) (THIS); #ifdef WIN32
STDMETHODIMP DeleteStream (THIS_ DWORD fccType, LONG lParam);
#else
STDMETHODIMP Reserved1 (THIS); STDMETHODIMP Reserved2 (THIS); STDMETHODIMP Reserved3 (THIS); STDMETHODIMP Reserved4 (THIS); STDMETHODIMP Reserved5 (THIS); #endif
private: CPrxAVIFile(IUnknown FAR* pUnkOuter); ~CPrxAVIFile();
// IRpcProxyBuffer which is also the controlling unknown
struct CProxyImpl : IRpcProxyBuffer { public: CProxyImpl(CPrxAVIFile FAR* pPrxAVIFile) { m_pPrxAVIFile = pPrxAVIFile; }
STDMETHOD(QueryInterface)(REFIID iid, LPVOID FAR* ppv); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void);
STDMETHOD(Connect)(IRpcChannelBuffer FAR* pRpcChannelBuffer); STDMETHOD_(void, Disconnect)(void);
private: CPrxAVIFile FAR* m_pPrxAVIFile; }; friend CProxyImpl;
CProxyImpl m_Proxy;
// private state:
ULONG m_refs; IUnknown FAR* m_pUnkOuter; IRpcChannelBuffer FAR* m_pRpcChannelBuffer; AVIFILEINFO m_fi; };
// interface stub for IAVIFile
class FAR CStubAVIFile : public IRpcStubBuffer { public: static HRESULT Create(IUnknown FAR* pUnkObject, IRpcStubBuffer FAR* FAR* ppStub);
STDMETHOD(QueryInterface) (REFIID iid, LPVOID FAR* ppv); STDMETHOD_(ULONG,AddRef) (void); STDMETHOD_(ULONG,Release) (void);
STDMETHOD(Connect)(IUnknown FAR* pUnkObject); STDMETHOD_(void, Disconnect)(void); STDMETHOD(Invoke)(RPCOLEMESSAGE FAR *pMessage, IRpcChannelBuffer FAR *pChannel); STDMETHOD_(IRpcStubBuffer FAR *, IsIIDSupported)(REFIID iid); STDMETHOD_(ULONG, CountRefs)(void); STDMETHOD(DebugServerQueryInterface)(LPVOID FAR *ppv); STDMETHOD_(void, DebugServerRelease)(LPVOID pv);
private: CStubAVIFile(void); ~CStubAVIFile(void);
ULONG m_refs;
IAVIFile FAR* m_pAVIFile; };
|