CComClassFactory 类

此类实现 IClassFactory 接口。

语法

class CComClassFactory
    : public IClassFactory,
      public CComObjectRootEx<CComGlobalsThreadModel>

成员

公共方法

名称 描述
CComClassFactory::CreateInstance 创建指定 CLSID 的对象。
CComClassFactory::LockServer 锁定内存中的类工厂。

备注

CComClassFactory 实现 IClassFactory 接口,该接口包含用于创建特定 CLSID 对象的方法,以及锁定内存中的类工厂的方法,以便更快地创建新对象。 IClassFactory 必须为在系统注册表中注册的每个类以及为其分配 CLSID 的每个类实现。

ATL 对象通常通过从 CComCoClass 派生来获取类工厂。 此类包括宏 DECLARE_CLASSFACTORY,该宏将 CComClassFactory 声明为默认类工厂。 若要重写此默认值,请在类定义中指定其中一个 DECLARE_CLASSFACTORYXXX 宏。 例如,DECLARE_CLASSFACTORY_EX 宏使用类工厂的指定类:

class ATL_NO_VTABLE CMyCustomClass :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyCustomClass, &CLSID_MyCustomClass>,
   public IDispatchImpl<IMyCustomClass, &IID_IMyCustomClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
   DECLARE_CLASSFACTORY_EX(CMyClassFactory)

   // Remainder of class declaration omitted.

上述类定义规定 CMyClassFactory 将用作对象的默认类工厂。 CMyClassFactory 必须派生自 CComClassFactory 和重写 CreateInstance

ATL 提供声明类工厂的其他三个宏:

要求

标头:atlcom.h

CComClassFactory::CreateInstance

创建指定 CLSID 的对象并检索指向此对象的接口指针。

STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);

参数

pUnkOuter
[in] 如果要创建聚合中的对象,pUnkOuter 必须是外部未知参数。 否则,pUnkOuter 必须为 NULL。

riid
[in] 请求的 接口的 IID。 如果 pUnkOuter 为非 NULL,riid 必须是 IID_IUnknown

ppvObj
[out] 指向 riid 标识的接口指针的指针。 如果对象不支持此接口,则 ppvObj 设置为 NULL。

返回值

标准 HRESULT 值。

CComClassFactory::LockServer

通过分别调用 _Module::Lock_Module::Unlock,递增和递减模块锁计数。

STDMETHOD(LockServer)(BOOL fLock);

参数

fLock
[in] 如果为 TRUE,则锁计数递增;否则,锁计数递减。

返回值

标准 HRESULT 值。

备注

_Module 引用 CComModule 的全局实例或派生自它的类。

调用 LockServer 允许客户端保留到类工厂,以便快速创建多个对象。

另请参阅

CComObjectRootEx 类
CComGlobalsThreadModel
类概述