Класс 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, необходимо выполнить IID_IUnknown
riid.
ppvObj
[out] Указатель на указатель интерфейса, определяемый идентификатором riid. Если объект не поддерживает этот интерфейс, ppvObj имеет значение NULL.
Возвращаемое значение
Стандартное значение HRESULT.
CComClassFactory::LockServer
Увеличивает и уменьшает количество блокировок модуля путем вызова _Module::Lock
и _Module::Unlock
соответственно.
STDMETHOD(LockServer)(BOOL fLock);
Параметры
стадо
[in] Если значение TRUE, число блокировок увеличивается; в противном случае число блокировок уменьшается.
Возвращаемое значение
Стандартное значение HRESULT.
Замечания
_Module
ссылается на глобальный экземпляр CComModule или класс, производный от него.
Вызов LockServer
позволяет клиенту храниться на фабрике классов, чтобы можно было быстро создавать несколько объектов.
См. также
Класс CComObjectRootEx
CComGlobalsThreadModel
Общие сведения о классе