Поделиться через


Класс 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 предоставляет три других макроса, которые объявляют фабрику классов:

Требования

Заголовок: atlcom.h

CComClassFactory::CreateInstance

Создает объект указанного CLSID и извлекает указатель интерфейса на этот объект.

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

Параметры

pUnkOuter
[in] Если объект создается в составе агрегата, pUnkOuter должен быть внешним неизвестным. В противном случае pUnkOuter должен иметь значение NULL.

riid
[in] IID запрошенного интерфейса. Если pUnkOuter не имеет значения NULL, необходимо выполнить IID_IUnknownriid.

ppvObj
[out] Указатель на указатель интерфейса, определяемый идентификатором riid. Если объект не поддерживает этот интерфейс, ppvObj имеет значение NULL.

Возвращаемое значение

Стандартное значение HRESULT.

CComClassFactory::LockServer

Увеличивает и уменьшает количество блокировок модуля путем вызова _Module::Lock и _Module::Unlockсоответственно.

STDMETHOD(LockServer)(BOOL fLock);

Параметры

стадо
[in] Если значение TRUE, число блокировок увеличивается; в противном случае число блокировок уменьшается.

Возвращаемое значение

Стандартное значение HRESULT.

Замечания

_Moduleссылается на глобальный экземпляр CComModule или класс, производный от него.

Вызов LockServer позволяет клиенту храниться на фабрике классов, чтобы можно было быстро создавать несколько объектов.

См. также

Класс CComObjectRootEx
CComGlobalsThreadModel
Общие сведения о классе