//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: dfunmfct.hxx // // Contents: OLE2 unmarshalling support for docfiles // // Classes: CDocfileUnmarshalFactory // // History: 25-Jan-93 DrewB Created // // Notes: Adapted from OLE2 dfmarshl.h and defcf.cpp // //---------------------------------------------------------------------------- #ifndef __DFUNMFCT_HXX__ #define __DFUNMFCT_HXX__ #include //+--------------------------------------------------------------------------- // // Class: CDocfileUnmarshalFactory (dfuf) // // Purpose: Implements OLE2 unmarshalling support // // Interface: See below // // History: 25-Jan-93 DrewB Created // // Notes: This class is intended to be used statically // rather than dynamically with initialization being // deferred past construction to avoid unnecessary // initialization of static objects. // Init should be called to initialize in place of // a constructor. // //---------------------------------------------------------------------------- #ifndef FLAT // C700 - C7 doesn't like long interface+method names #define CDocfileUnmarshalFactory CDFUF #endif class CDocfileUnmarshalFactory : public IMarshal, public IClassFactory { public: inline void *operator new(size_t size); inline void operator delete(void *pv); inline CDocfileUnmarshalFactory(void); // IUnknown STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void); // IMarshal STDMETHOD(GetUnmarshalClass)(REFIID riid, LPVOID pv, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPCLSID pCid); STDMETHOD(GetMarshalSizeMax)(REFIID riid, LPVOID pv, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPDWORD pSize); STDMETHOD(MarshalInterface)(IStream *pStm, REFIID riid, LPVOID pv, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags); STDMETHOD(UnmarshalInterface)(IStream *pStm, REFIID riid, LPVOID *ppv); STDMETHOD(ReleaseMarshalData)(IStream *pStm); STDMETHOD(DisconnectObject)(DWORD dwReserved); // IClassFactory STDMETHOD(CreateInstance)(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppunkObject); STDMETHOD(LockServer)(BOOL fLock); // New methods inline SCODE Validate(void) const; private: inline LONG _AddRef(void); ULONG _sig; }; #define CDOCFILEUNMARSHALFACTORY_SIG LONGSIG('D', 'F', 'U', 'F') #define CDOCFILEUNMARSHALFACTORY_SIGDEL LONGSIG('D', 'f', 'U', 'f') //+-------------------------------------------------------------- // // Member: CDocfileUnmarshalFactory::Validate, public // // Synopsis: Validates the class signature // // Returns: Returns STG_E_INVALIDHANDLE for failure // // History: 25-Jan-93 DrewB Created // //--------------------------------------------------------------- inline SCODE CDocfileUnmarshalFactory::Validate(void) const { return (this == NULL || _sig != CDOCFILEUNMARSHALFACTORY_SIG) ? STG_E_INVALIDHANDLE : S_OK; } //+--------------------------------------------------------------------------- // // Member: CDocfileUnmarshalFactory::AddRef, private // // Synopsis: Increments the ref count // // History: 27-Jan-93 DrewB Created // // Notes: Currently does nothing because we don't maintain a ref count // This is present to make switching to a ref counted // implementation easy // //---------------------------------------------------------------------------- inline LONG CDocfileUnmarshalFactory::_AddRef(void) { return 1; } //+--------------------------------------------------------------------------- // // Member: CDocfileUnmarshalFactory::CDocfileUnmarshalFactory, public // // Synopsis: Constructor // // History: 27-Jan-93 DrewB Created // //---------------------------------------------------------------------------- inline CDocfileUnmarshalFactory::CDocfileUnmarshalFactory(void) { _sig = CDOCFILEUNMARSHALFACTORY_SIG; } #endif // #ifndef __DFUNMFCT_HXX__