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

📄 majfactory.h

📁 EVC4.rar
💻 H
字号:
/*++
Copyright (c) Microsoft Corporation

Module Name:   majfactory.h

Abstract:  
    Global Class Factory implementation
Functions:


Notes: 

--*/
#ifndef _MAJFACTORY_H_
#define _MAJFACTORY_H_

#ifdef __cplusplus

typedef HRESULT (*PFNCREATE)(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv);

typedef struct _OBJCREATETABLE
{
    const CLSID *pClsID;
    PFNCREATE pfnCreate;
} OBJCREATETABLE, *POBJCREATETABLE;


class CClassFactory
{
public:
    // IUnknown Methods
    STDMETHOD  (QueryInterface)(REFIID riid, void **ppv)
    {
        if ((riid == IID_IUnknown) || (riid == IID_IClassFactory))
        {
            *ppv = this;
            return S_OK;
        }
        else
        {
            return E_NOINTERFACE;
        }
    }

    STDMETHOD_ (ULONG, AddRef)(void)
    {
        return InterlockedIncrement(&m_lRefCount);
    }

    STDMETHOD_ (ULONG, Release)(void)
    {
        ASSERT(m_lRefCount);

        LONG rc = InterlockedDecrement(&m_lRefCount);

        if (rc == 0)
        {
            delete(this);
        }

        return rc;
    }

    // IClassFactory Methods
    STDMETHOD  (CreateInstance)(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv)
    {
        return m_pfnCreate(pUnkOuter, riid, ppv);
    }

    STDMETHOD  (LockServer)(BOOL bLock)
    {
        return S_OK;
    }

    CClassFactory(PFNCREATE pfnCreate)
    {
        m_pfnCreate = pfnCreate;
        m_lRefCount = 1;
    }

    ~CClassFactory() { };

private:
    PFNCREATE m_pfnCreate;
    LONG      m_lRefCount;
};

#endif  // __cplusplus

#endif  // _MAJFACTORY_H_

⌨️ 快捷键说明

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