|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: bindctx.hxx
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 9-16-96 JohannP (Johann Posch) Created
//
//----------------------------------------------------------------------------
#ifndef BINDCTX_HXX
#define BINDCTX_HXX
// These two structures are used to pass data from the inloader callbacks
// to the wndproc of the hidden window in the main thread.
class CTransaction; class CTransData; class CBindCtx;
class CBindCtx : public IBindCtx, public IMarshal { private: CBindCtx(IBindCtx * pbcRem);
public: static HRESULT Create(CBindCtx **ppCBCtx, IBindCtx *pbc = NULL); ~CBindCtx();
// *** IUnknown methods ***
STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// *** IBindCtx methods ***
STDMETHODIMP RegisterObjectBound(IUnknown *punk) { return _pbcLocal->RegisterObjectBound(punk); }
STDMETHODIMP RevokeObjectBound(IUnknown *punk) { return _pbcLocal->RevokeObjectBound(punk); }
STDMETHODIMP ReleaseBoundObjects(void) { return _pbcLocal->ReleaseBoundObjects(); }
STDMETHODIMP SetBindOptions(BIND_OPTS *pbindopts) { return _pbcLocal->SetBindOptions(pbindopts); }
STDMETHODIMP GetBindOptions(BIND_OPTS *pbindopts) { return _pbcLocal->GetBindOptions(pbindopts); }
STDMETHODIMP GetRunningObjectTable(IRunningObjectTable **pprot) { return _pbcLocal->GetRunningObjectTable(pprot); }
STDMETHODIMP RegisterObjectParam(LPOLESTR pszKey, IUnknown *punk) { return _pbcLocal->RegisterObjectParam(pszKey, punk); }
STDMETHODIMP GetObjectParam(LPOLESTR pszKey, IUnknown **ppunk); STDMETHODIMP EnumObjectParam(IEnumString **ppenum); STDMETHODIMP RevokeObjectParam(LPOLESTR pszKey);
// *** IMarshal methods ***
STDMETHODIMP GetUnmarshalClass(REFIID riid, void *pvInterface, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid); STDMETHODIMP GetMarshalSizeMax(REFIID riid, void *pvInterface, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize); STDMETHODIMP MarshalInterface(IStream *pStm, REFIID riid, void *pvInteface, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags); STDMETHODIMP UnmarshalInterface(IStream *pStm, REFIID riid, void **ppv); STDMETHODIMP ReleaseMarshalData(IStream *pStm); STDMETHODIMP DisconnectObject(DWORD dwReserved);
// private method
STDMETHODIMP SetTransactionObject(CTransaction *pCTrans); STDMETHODIMP GetTransactionObject(CTransaction **ppCTrans);
STDMETHODIMP SetTransactionObjects(CTransaction *pCTrans, CTransData *pCTransData); STDMETHODIMP GetTransactionObjects(CTransaction **ppCTrans,CTransData **ppCTransData);
STDMETHODIMP SetTransData(CTransData *pCTransData); STDMETHODIMP GetTransData(CTransData **ppCTransData); IBindCtx *GetRemBindCtx() { return _pbcRem; }
IBindCtx *GetLocalBindCtx() { return _pbcLocal; }
private:
inline BOOL CanMarshalIID(REFIID riid); HRESULT ValidateMarshalParams(REFIID riid, void *pvInterface, DWORD dwDestContext, void *pvDestContext,DWORD mshlflags); CRefCount _CRefs; // refcount class
IBindCtx * _pbcRem; // the remote bind context
IBindCtx * _pbcLocal; // the local bind context
CTransaction *_pCTrans; CTransData *_pCTransData; DWORD _dwThreadId;
};
#endif // BINDCTX_HXX
|