//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1994. // // File: urlmk.hxx // // Contents: // // Classes: // // Functions: // // History: 12-12-95 JohannP (Johann Posch) Created // //---------------------------------------------------------------------------- #ifndef URLMK_HXX #define URLMK_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 CUrlMon; // Declaration of CUrlMon. This class implements IMoniker. // class declaration of CUrlMon. This class derives from IMoniker. class CUrlMon : public IMoniker, public IROTData, public IMarshal { public: CUrlMon(LPWSTR szUrl); ~CUrlMon(); LPWSTR GetUrl() { return _pwzUrl; } private: void DeleteUrl(); HRESULT SetUrl(LPWSTR pwzUrl, LPWSTR pwzExtra = NULL); HRESULT IsRunningROT(IBindCtx *pbc, IMoniker *pmkToLeft,LPRUNNINGOBJECTTABLE *ppROT); BOOL IsUrlMoniker(IMoniker *pMk); STDMETHODIMP StartBinding(BOOL fBindToObject, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObj); public: // *** IUnknown methods *** STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // *** IPerist methods *** STDMETHODIMP GetClassID(CLSID *pClassID); // *** IPeristStream methods *** STDMETHODIMP IsDirty(); STDMETHODIMP Load(IStream *pistm); STDMETHODIMP Save(IStream *pistm, BOOL fClearDirty); STDMETHODIMP GetSizeMax(ULARGE_INTEGER *pcbSize); // *** IMoniker methods *** STDMETHODIMP BindToObject(IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riidResult, void **ppvResult); STDMETHODIMP BindToStorage(IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObj); STDMETHODIMP Reduce(IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced); STDMETHODIMP ComposeWith(IMoniker *pmkRight, BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite); STDMETHODIMP Enum(BOOL fForward, IEnumMoniker **ppenumMoniker); STDMETHODIMP IsEqual(IMoniker *pmkOtherMoniker); STDMETHODIMP Hash(DWORD *pdwHash); STDMETHODIMP IsRunning(IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning); STDMETHODIMP GetTimeOfLastChange(IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime); STDMETHODIMP Inverse(IMoniker **ppmk); STDMETHODIMP CommonPrefixWith(IMoniker *pmkOther, IMoniker **ppmkPrefix); STDMETHODIMP RelativePathTo(IMoniker *pmkOther, IMoniker **ppmkRelPath); STDMETHODIMP GetDisplayName(IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName); STDMETHODIMP ParseDisplayName(IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut); STDMETHODIMP IsSystemMoniker(DWORD *pdwMksys); public: // // *** 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: inline BOOL CanMarshalIID(REFIID riid); HRESULT ValidateMarshalParams(REFIID riid, void *pvInterface, DWORD dwDestContext, void *pvDestContext,DWORD mshlflags); public: // *** IROTData methods *** STDMETHODIMP GetComparisonData(byte *pbData, ULONG cbMax, ULONG *pcbData); private: CRefCount _CRefs; // refcount class LPWSTR _pwzUrl; // the url string }; #endif // URLMK_HXX