Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

180 lines
6.0 KiB

//+---------------------------------------------------------------------------
//
// 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