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_CLASSFACTORY
XXX 宏。 例如,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 提供声明类工厂的其他三个宏:
DECLARE_CLASSFACTORY2 使用 CComClassFactory2,它通过许可证控制创建。
DECLARE_CLASSFACTORY_AUTO_THREAD 使用 CComClassFactoryAutoThread,后者在多个单元中创建对象。
DECLARE_CLASSFACTORY_SINGLETON 使用 CComClassFactorySingleton,该实例构造单个 CComObjectGlobal 对象。
要求
标头: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
允许客户端保留到类工厂,以便快速创建多个对象。