181 lines
6 KiB
C++
181 lines
6 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
|
//
|
|
// File: srvhndlr.h
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 11-17-95 JohannP (Johann Posch) Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef _SRVHNDLR_H_DEFINED_
|
|
#define _SRVHNDLR_H_DEFINED_
|
|
|
|
class CStdIdentity;
|
|
class CEmbServerClientSite;
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CServerHandler ()
|
|
//
|
|
// Purpose:
|
|
//
|
|
//
|
|
// History: 11-17-95 JohannP (Johann Posch) Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CServerHandler : public IServerHandler
|
|
{
|
|
public:
|
|
|
|
|
|
CServerHandler(CStdIdentity *pStdId);
|
|
~CServerHandler();
|
|
|
|
// IUnknown methods
|
|
|
|
STDMETHOD(QueryInterface) ( REFIID riid, LPVOID FAR* ppvObj);
|
|
STDMETHOD_(ULONG,AddRef) (void);
|
|
STDMETHOD_(ULONG,Release) (void);
|
|
|
|
// IServerHandler
|
|
STDMETHOD(Run) (DWORD dwDHFlags, REFIID riidClientInterface, MInterfacePointer* pIRDClientInterface, BOOL fHasIPSite, LPOLESTR szContainerApp,
|
|
LPOLESTR szContainerObj,IStorage * pStg,IAdviseSink* pAdvSink,DWORD *pdwConnection,
|
|
HRESULT *hresultClsidUser, CLSID *pContClassID, HRESULT *hresultContentMiscStatus,
|
|
DWORD *pdwMiscStatus
|
|
);
|
|
|
|
STDMETHOD(DoVerb) (LONG iVerb, LPMSG lpmsg,BOOL fUseRunClientSite,
|
|
IOleClientSite* pIRDClientSite,LONG lindex,HWND hwndParent,
|
|
LPCRECT lprcPosRect);
|
|
|
|
STDMETHOD(SetClientSite) (IOleClientSite* pClientSite);
|
|
|
|
// Delegating IDataObject facing container
|
|
|
|
STDMETHOD(GetData) ( LPFORMATETC pformatetcIn,
|
|
LPSTGMEDIUM pmedium );
|
|
STDMETHOD(GetDataHere) ( LPFORMATETC pformatetc,
|
|
LPSTGMEDIUM pmedium );
|
|
STDMETHOD(QueryGetData) ( LPFORMATETC pformatetc );
|
|
STDMETHOD(GetCanonicalFormatEtc) ( LPFORMATETC pformatetc,
|
|
LPFORMATETC pformatetcOut);
|
|
STDMETHOD(SetData) ( LPFORMATETC pformatetc,
|
|
LPSTGMEDIUM pmedium, BOOL fRelease);
|
|
STDMETHOD(EnumFormatEtc) ( DWORD dwDirection,
|
|
LPENUMFORMATETC FAR* ppenumFormatEtc);
|
|
STDMETHOD(DAdvise) ( FORMATETC FAR* pFormatetc, DWORD advf,
|
|
IAdviseSink FAR* pAdvSink,
|
|
DWORD FAR* pdwConnection);
|
|
STDMETHOD(DUnadvise) ( DWORD dwConnection);
|
|
STDMETHOD(EnumDAdvise) ( LPENUMSTATDATA FAR* ppenumAdvise);
|
|
|
|
|
|
|
|
private:
|
|
STDMETHOD_(void, ReleaseObject)();
|
|
|
|
INTERNAL(QueryServerInterface) (REFIID riid,void ** ppInterface);
|
|
INTERNAL(ReleaseServerInterface) (void * ppInterface);
|
|
INTERNAL(GetClientSiteFromMInterfacePtr) (REFIID riidClientInterface, MInterfacePointer* pIRDClientSite,BOOL fHasIPSite, LPOLECLIENTSITE* ppOleClientSite);
|
|
|
|
ULONG _cRefs; // refcount on IServerHandler
|
|
CStdIdentity *m_pStdId; // Pointer to StdIdentity for Embedding Handler.
|
|
|
|
LPOLECLIENTSITE m_pOleEmbServerClientSite; // Review, shouldn't need Pointer to client site if have one.
|
|
CEmbServerClientSite *m_pCEmbServerClientSite; // member pointing to ClientSiteObject.
|
|
};
|
|
|
|
// Wrapper object for Serverhandler Interfaces on the ClientSite.
|
|
|
|
class CEmbServerWrapper : public IServerHandler, public IDataObject
|
|
{
|
|
public:
|
|
|
|
CEmbServerWrapper(IUnknown *pUnkOuter,IServerHandler *ServerHandler);
|
|
~CEmbServerWrapper();
|
|
|
|
// Controlling Unknown.
|
|
class CPrivUnknown : public IUnknown
|
|
{
|
|
public:
|
|
STDMETHOD(QueryInterface) ( REFIID riid, LPVOID FAR* ppvObj);
|
|
STDMETHOD_(ULONG,AddRef) (void);
|
|
STDMETHOD_(ULONG,Release) (void);
|
|
|
|
CEmbServerWrapper *m_EmbServerWrapper;
|
|
};
|
|
|
|
friend class CPrivUnknown;
|
|
CPrivUnknown m_Unknown;
|
|
|
|
// IUnknown Methods
|
|
STDMETHOD(QueryInterface) ( REFIID iid, LPVOID FAR* ppvObj);
|
|
STDMETHOD_(ULONG,AddRef) (void);
|
|
STDMETHOD_(ULONG,Release) (void);
|
|
|
|
// IServerHandler
|
|
STDMETHOD(Run) (DWORD dwDHFlags, REFIID riidClientInterface, MInterfacePointer* pIRDClientInterface,
|
|
BOOL fHasIPSite,LPOLESTR szContainerApp,
|
|
LPOLESTR szContainerObj,IStorage * pStg,IAdviseSink* pAdvSink,DWORD *pdwConnection,
|
|
HRESULT *hresultClsidUser, CLSID *pContClassID, HRESULT *hresultContentMiscStatus,
|
|
DWORD *pdwMiscStatus
|
|
);
|
|
|
|
STDMETHOD(DoVerb) (LONG iVerb, LPMSG lpmsg,BOOL fUseRunClientSite,
|
|
IOleClientSite* pIRDClientSite,LONG lindex,HWND hwndParent,
|
|
LPCRECT lprcPosRect);
|
|
|
|
STDMETHOD(SetClientSite) (IOleClientSite* pClientSite);
|
|
|
|
// Delegating IDataObject facing container
|
|
|
|
STDMETHOD(GetData) ( LPFORMATETC pformatetcIn,
|
|
LPSTGMEDIUM pmedium );
|
|
STDMETHOD(GetDataHere) ( LPFORMATETC pformatetc,
|
|
LPSTGMEDIUM pmedium );
|
|
STDMETHOD(QueryGetData) ( LPFORMATETC pformatetc );
|
|
STDMETHOD(GetCanonicalFormatEtc) ( LPFORMATETC pformatetc,
|
|
LPFORMATETC pformatetcOut);
|
|
STDMETHOD(SetData) ( LPFORMATETC pformatetc,
|
|
LPSTGMEDIUM pmedium, BOOL fRelease);
|
|
STDMETHOD(EnumFormatEtc) ( DWORD dwDirection,
|
|
LPENUMFORMATETC FAR* ppenumFormatEtc);
|
|
STDMETHOD(DAdvise) ( FORMATETC FAR* pFormatetc, DWORD advf,
|
|
IAdviseSink FAR* pAdvSink,
|
|
DWORD FAR* pdwConnection);
|
|
STDMETHOD(DUnadvise) ( DWORD dwConnection);
|
|
STDMETHOD(EnumDAdvise) ( LPENUMSTATDATA FAR* ppenumAdvise);
|
|
|
|
public:
|
|
IUnknown *m_pUnkOuter; // Controlling Unknown
|
|
ULONG m_cRefs;
|
|
|
|
IServerHandler *m_ServerHandler; // pointer to real server Handler.
|
|
|
|
|
|
};
|
|
|
|
|
|
HRESULT CreateServerHandler(const CLSID *pClsID, IUnknown *punk,
|
|
IClientSiteHandler *pClntHndlr,
|
|
IServerHandler **ppSrvHdlr);
|
|
|
|
|
|
CEmbServerWrapper* CreateEmbServerWrapper(IUnknown *pUnkOuter,IServerHandler *ServerHandler);
|
|
|
|
|
|
#endif // _SRVHNDLR_H_DEFINED
|
|
|