⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objects.h

📁 英文版的 想要的话可以下载了 为大家服务
💻 H
字号:
/*
 * OBJECTS.H
 * File and Item Objects for Link Source, Chapter 9
 *
 * Classes to define the file and item objects supplied by
 * this server as well as their interfaces.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Right Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#ifndef _OBJECTS_H_
#define _OBJECTS_H_

#define CHAPTER9
#include <inole.h>
#include <idescrip.h>

//Shared implementations
class CImpIOleItemContainer;
typedef CImpIOleItemContainer *PCImpIOleItemContainer;

class CImpIDescription;
typedef CImpIDescription *PCImpIDescription;


//FILEOBJ.CPP

class CImpIPersistFile;
typedef CImpIPersistFile *PCImpIPersistFile;


class CFileObject : public IUnknown
    {
    friend class CImpIPersistFile;
    friend class CImpIOleItemContainer;
    friend class CImpIDescription;

    protected:
        ULONG           m_cRef;         //Object reference count
        LPUNKNOWN       m_pUnkOuter;    //Controlling unknown
        PFNDESTROYED    m_pfnDestroy;   //To call on closure

        CLSID           m_clsID;        //Object identity
        OLECHAR         m_szFile[512];  //Current filename
        IStorage       *m_pIStorage;    //Opened file
        IMoniker       *m_pmk;          //Our name
        DWORD           m_dwRegROT;     //ROT registration

        //Interfaces
        PCImpIPersistFile         m_pImpIPersistFile;
        PCImpIOleItemContainer    m_pImpIOleItemContainer;
        PCImpIDescription         m_pImpIDescription;

    public:
        CFileObject(LPUNKNOWN, PFNDESTROYED);
        ~CFileObject(void);

        BOOL Init(void);

        //Non-delegating object IUnknown
        STDMETHODIMP         QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);
    };

typedef CFileObject *PCFileObject;


class CImpIPersistFile : public IPersistFile
    {
    protected:
        ULONG           m_cRef;      //Interface reference count
        PCFileObject    m_pObj;      //Backpointer to the object
        LPUNKNOWN       m_pUnkOuter; //For delegation

    public:
        CImpIPersistFile(PCFileObject, LPUNKNOWN);
        ~CImpIPersistFile(void);

        STDMETHODIMP QueryInterface(REFIID, LPVOID *);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        STDMETHODIMP GetClassID(LPCLSID);
        STDMETHODIMP IsDirty(void);
        STDMETHODIMP Load(LPCOLESTR, DWORD);
        STDMETHODIMP Save(LPCOLESTR, BOOL);
        STDMETHODIMP SaveCompleted(LPCOLESTR);
        STDMETHODIMP GetCurFile(LPOLESTR *);
    };



//CONTITEM.CPP

/*
 * Implementation of an item object that itself contains other
 * items, thus it implements IOleItemContainer.  IDescription is
 * added only for reason of this sample.
 */


class CContainerItem : public IUnknown
    {
    friend class CImpIOleItemContainer;
    friend class CImpIDescription;

    protected:
        ULONG           m_cRef;         //Object reference count
        LPUNKNOWN       m_pUnkParent;   //CFileObject's pointer
        PFNDESTROYED    m_pfnDestroy;   //To call on closure
        IStorage       *m_pIStorage;    //Our storage
        IMoniker       *m_pmk;          //Our name
        DWORD           m_dwRegROT;     //ROT Registration

        //Interfaces
        PCImpIOleItemContainer    m_pImpIOleItemContainer;
        PCImpIDescription         m_pImpIDescription;

    public:
        CContainerItem(LPUNKNOWN, PFNDESTROYED);
        ~CContainerItem(void);

        BOOL Init(IMoniker *, IBindCtx *, LPOLESTR, IStorage *);

        //Non-delegating object IUnknown
        STDMETHODIMP         QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);
    };

typedef CContainerItem *PCContainerItem;



//SIMPITEM.CPP

/*
 * Implementation of a simple item object with only IDescription.
 */

class CSimpleItem : public IUnknown
    {
    friend class CImpIDescription;

    protected:
        ULONG           m_cRef;         //Object reference count
        LPUNKNOWN       m_pUnkParent;   //CContainerItems's pointer
        PFNDESTROYED    m_pfnDestroy;   //To call on closure
        IStorage       *m_pIStorage;    //Our storage
        IMoniker       *m_pmk;          //Our name
        DWORD           m_dwRegROT;     //ROT Registration

        //Interfaces
        PCImpIDescription         m_pImpIDescription;

    public:
        CSimpleItem(LPUNKNOWN, PFNDESTROYED);
        ~CSimpleItem(void);

        BOOL Init(IMoniker *, IBindCtx *, LPOLESTR, IStorage *);

        //Non-delegating object IUnknown
        STDMETHODIMP         QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);
    };

typedef CSimpleItem *PCSimpleItem;




//IOLECONT.CPP
/*
 * IOleItemContainer implementation that is shared between
 * CFileObject and CContainerItem.  The flag to the constructor
 * indicates which object exposes any given instantiation.
 */

class CImpIOleItemContainer : public IOleItemContainer
    {
    protected:
        ULONG               m_cRef;
        LPUNKNOWN           m_pUnkOuter;

        BOOL                m_fFileObj;
        PCFileObject        m_pObjFile;
        PCContainerItem     m_pObjCont;

    public:
        CImpIOleItemContainer(LPVOID, LPUNKNOWN, BOOL);
        ~CImpIOleItemContainer(void);

        HRESULT GetRunning(LPOLESTR, IBindCtx *, REFIID, void **
            , BOOL);

        STDMETHODIMP QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        STDMETHODIMP ParseDisplayName(LPBC, LPOLESTR, ULONG *
                         , LPMONIKER *);
        STDMETHODIMP EnumObjects(DWORD, LPENUMUNKNOWN *);
        STDMETHODIMP LockContainer(BOOL);
        STDMETHODIMP GetObject(LPOLESTR, DWORD, LPBINDCTX, REFIID
                         , PPVOID);
        STDMETHODIMP GetObjectStorage(LPOLESTR, LPBINDCTX, REFIID
                         , PPVOID);
        STDMETHODIMP IsRunning(LPOLESTR);
    };


#define SZOPENSTORAGE  OLETEXT("OpenStorage")


//IDESCRIP.CPP
/*
 * IDescription implementation that is shared between
 * CFileObject, CContainerItem, and CSimpleItem.  The
 * IStorage argument to the constructor is all that this
 * implementation needs, so there's no backpointer.
 */

class CImpIDescription : public IDescription
    {
    protected:
        ULONG               m_cRef;
        LPUNKNOWN           m_pUnkOuter;
        IStorage           *m_pIStorage;

    public:
        CImpIDescription(LPUNKNOWN);
        ~CImpIDescription(void);

        void SetStorage(IStorage *);

        STDMETHODIMP QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        STDMETHODIMP GetText(LPOLESTR, ULONG);
    };


#endif //_OBJECTS_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -