OBJECTS.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:7k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * OBJECTS.H
  3.  * File and Item Objects for Link Source, Chapter 9
  4.  *
  5.  * Classes to define the file and item objects supplied by
  6.  * this server as well as their interfaces.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Right Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14. #ifndef _OBJECTS_H_
  15. #define _OBJECTS_H_
  16. #define CHAPTER9
  17. #include <inole.h>
  18. #include <idescrip.h>
  19. //Shared implementations
  20. class CImpIOleItemContainer;
  21. typedef CImpIOleItemContainer *PCImpIOleItemContainer;
  22. class CImpIDescription;
  23. typedef CImpIDescription *PCImpIDescription;
  24. //FILEOBJ.CPP
  25. class CImpIPersistFile;
  26. typedef CImpIPersistFile *PCImpIPersistFile;
  27. class CFileObject : public IUnknown
  28.     {
  29.     friend class CImpIPersistFile;
  30.     friend class CImpIOleItemContainer;
  31.     friend class CImpIDescription;
  32.     protected:
  33.         ULONG           m_cRef;         //Object reference count
  34.         LPUNKNOWN       m_pUnkOuter;    //Controlling unknown
  35.         PFNDESTROYED    m_pfnDestroy;   //To call on closure
  36.         CLSID           m_clsID;        //Object identity
  37.         OLECHAR         m_szFile[512];  //Current filename
  38.         IStorage       *m_pIStorage;    //Opened file
  39.         IMoniker       *m_pmk;          //Our name
  40.         DWORD           m_dwRegROT;     //ROT registration
  41.         //Interfaces
  42.         PCImpIPersistFile         m_pImpIPersistFile;
  43.         PCImpIOleItemContainer    m_pImpIOleItemContainer;
  44.         PCImpIDescription         m_pImpIDescription;
  45.     public:
  46.         CFileObject(LPUNKNOWN, PFNDESTROYED);
  47.         ~CFileObject(void);
  48.         BOOL Init(void);
  49.         //Non-delegating object IUnknown
  50.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  51.         STDMETHODIMP_(ULONG) AddRef(void);
  52.         STDMETHODIMP_(ULONG) Release(void);
  53.     };
  54. typedef CFileObject *PCFileObject;
  55. class CImpIPersistFile : public IPersistFile
  56.     {
  57.     protected:
  58.         ULONG           m_cRef;      //Interface reference count
  59.         PCFileObject    m_pObj;      //Backpointer to the object
  60.         LPUNKNOWN       m_pUnkOuter; //For delegation
  61.     public:
  62.         CImpIPersistFile(PCFileObject, LPUNKNOWN);
  63.         ~CImpIPersistFile(void);
  64.         STDMETHODIMP QueryInterface(REFIID, LPVOID *);
  65.         STDMETHODIMP_(ULONG) AddRef(void);
  66.         STDMETHODIMP_(ULONG) Release(void);
  67.         STDMETHODIMP GetClassID(LPCLSID);
  68.         STDMETHODIMP IsDirty(void);
  69.         STDMETHODIMP Load(LPCOLESTR, DWORD);
  70.         STDMETHODIMP Save(LPCOLESTR, BOOL);
  71.         STDMETHODIMP SaveCompleted(LPCOLESTR);
  72.         STDMETHODIMP GetCurFile(LPOLESTR *);
  73.     };
  74. //CONTITEM.CPP
  75. /*
  76.  * Implementation of an item object that itself contains other
  77.  * items, thus it implements IOleItemContainer.  IDescription is
  78.  * added only for reason of this sample.
  79.  */
  80. class CContainerItem : public IUnknown
  81.     {
  82.     friend class CImpIOleItemContainer;
  83.     friend class CImpIDescription;
  84.     protected:
  85.         ULONG           m_cRef;         //Object reference count
  86.         LPUNKNOWN       m_pUnkParent;   //CFileObject's pointer
  87.         PFNDESTROYED    m_pfnDestroy;   //To call on closure
  88.         IStorage       *m_pIStorage;    //Our storage
  89.         IMoniker       *m_pmk;          //Our name
  90.         DWORD           m_dwRegROT;     //ROT Registration
  91.         //Interfaces
  92.         PCImpIOleItemContainer    m_pImpIOleItemContainer;
  93.         PCImpIDescription         m_pImpIDescription;
  94.     public:
  95.         CContainerItem(LPUNKNOWN, PFNDESTROYED);
  96.         ~CContainerItem(void);
  97.         BOOL Init(IMoniker *, IBindCtx *, LPOLESTR, IStorage *);
  98.         //Non-delegating object IUnknown
  99.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  100.         STDMETHODIMP_(ULONG) AddRef(void);
  101.         STDMETHODIMP_(ULONG) Release(void);
  102.     };
  103. typedef CContainerItem *PCContainerItem;
  104. //SIMPITEM.CPP
  105. /*
  106.  * Implementation of a simple item object with only IDescription.
  107.  */
  108. class CSimpleItem : public IUnknown
  109.     {
  110.     friend class CImpIDescription;
  111.     protected:
  112.         ULONG           m_cRef;         //Object reference count
  113.         LPUNKNOWN       m_pUnkParent;   //CContainerItems's pointer
  114.         PFNDESTROYED    m_pfnDestroy;   //To call on closure
  115.         IStorage       *m_pIStorage;    //Our storage
  116.         IMoniker       *m_pmk;          //Our name
  117.         DWORD           m_dwRegROT;     //ROT Registration
  118.         //Interfaces
  119.         PCImpIDescription         m_pImpIDescription;
  120.     public:
  121.         CSimpleItem(LPUNKNOWN, PFNDESTROYED);
  122.         ~CSimpleItem(void);
  123.         BOOL Init(IMoniker *, IBindCtx *, LPOLESTR, IStorage *);
  124.         //Non-delegating object IUnknown
  125.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  126.         STDMETHODIMP_(ULONG) AddRef(void);
  127.         STDMETHODIMP_(ULONG) Release(void);
  128.     };
  129. typedef CSimpleItem *PCSimpleItem;
  130. //IOLECONT.CPP
  131. /*
  132.  * IOleItemContainer implementation that is shared between
  133.  * CFileObject and CContainerItem.  The flag to the constructor
  134.  * indicates which object exposes any given instantiation.
  135.  */
  136. class CImpIOleItemContainer : public IOleItemContainer
  137.     {
  138.     protected:
  139.         ULONG               m_cRef;
  140.         LPUNKNOWN           m_pUnkOuter;
  141.         BOOL                m_fFileObj;
  142.         PCFileObject        m_pObjFile;
  143.         PCContainerItem     m_pObjCont;
  144.     public:
  145.         CImpIOleItemContainer(LPVOID, LPUNKNOWN, BOOL);
  146.         ~CImpIOleItemContainer(void);
  147.         HRESULT GetRunning(LPOLESTR, IBindCtx *, REFIID, void **
  148.             , BOOL);
  149.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  150.         STDMETHODIMP_(ULONG) AddRef(void);
  151.         STDMETHODIMP_(ULONG) Release(void);
  152.         STDMETHODIMP ParseDisplayName(LPBC, LPOLESTR, ULONG *
  153.                          , LPMONIKER *);
  154.         STDMETHODIMP EnumObjects(DWORD, LPENUMUNKNOWN *);
  155.         STDMETHODIMP LockContainer(BOOL);
  156.         STDMETHODIMP GetObject(LPOLESTR, DWORD, LPBINDCTX, REFIID
  157.                          , PPVOID);
  158.         STDMETHODIMP GetObjectStorage(LPOLESTR, LPBINDCTX, REFIID
  159.                          , PPVOID);
  160.         STDMETHODIMP IsRunning(LPOLESTR);
  161.     };
  162. #define SZOPENSTORAGE  OLETEXT("OpenStorage")
  163. //IDESCRIP.CPP
  164. /*
  165.  * IDescription implementation that is shared between
  166.  * CFileObject, CContainerItem, and CSimpleItem.  The
  167.  * IStorage argument to the constructor is all that this
  168.  * implementation needs, so there's no backpointer.
  169.  */
  170. class CImpIDescription : public IDescription
  171.     {
  172.     protected:
  173.         ULONG               m_cRef;
  174.         LPUNKNOWN           m_pUnkOuter;
  175.         IStorage           *m_pIStorage;
  176.     public:
  177.         CImpIDescription(LPUNKNOWN);
  178.         ~CImpIDescription(void);
  179.         void SetStorage(IStorage *);
  180.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  181.         STDMETHODIMP_(ULONG) AddRef(void);
  182.         STDMETHODIMP_(ULONG) Release(void);
  183.         STDMETHODIMP GetText(LPOLESTR, ULONG);
  184.     };
  185. #endif //_OBJECTS_H_