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


Класс CComClassFactorySingleton

Этот класс является производным от CComClassFactory и использует CComObjectGlobal для создания одного объекта.

Внимание

Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.

Синтаксис

template<class T>
class CComClassFactorySingleton : public CComClassFactory

Параметры

T
Класс.

CComClassFactorySingleton является производным от CComClassFactory и использует CComObjectGlobal для создания одного объекта. Каждый вызов CreateInstance метода просто запрашивает этот объект для указателя интерфейса.

Участники

Открытые методы

Имя Описание
CComClassFactorySingleton::CreateInstance Запросы m_spObj указателя интерфейса.

Открытые члены данных

Имя Описание
CComClassFactorySingleton::m_spObj Объект CComObjectGlobal, созданный с помощью CComClassFactorySingleton.

Замечания

Объекты ATL обычно получают фабрику классов, исходя из CComCoClass. Этот класс включает макрос DECLARE_CLASSFACTORY, который объявляется CComClassFactory как фабрика классов по умолчанию. Чтобы использовать CComClassFactorySingleton, укажите макрос DECLARE_CLASSFACTORY_SINGLETON в определении класса объекта. Например:

class ATL_NO_VTABLE CMySingletonClass :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMySingletonClass, &CLSID_MySingletonClass>,
   public IMySingletonClass
{
public:
   DECLARE_CLASSFACTORY_SINGLETON(CMySingletonClass)

   // Remainder of class declaration omitted.

Иерархия наследования

CComObjectRootBase

CComObjectRootEx

IClassFactory

CComClassFactory

CComClassFactorySingleton

Требования

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

CComClassFactorySingleton::CreateInstance

Вызовы QueryInterface через m_spObj для получения указателя интерфейса.

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.

CComClassFactorySingleton::m_spObj

Объект CComObjectGlobal, созданный с помощью CComClassFactorySingleton.

CComPtr<IUnknown> m_spObj;

Замечания

Каждый вызов метода CreateInstance просто запрашивает этот объект для указателя интерфейса.

Обратите внимание, что текущая форма m_spObj представляет критическое изменение от способа работы CComClassFactorySingleton в предыдущих версиях ATL. В предыдущих версиях CComClassFactorySingleton объект был создан одновременно с фабрикой классов во время инициализации сервера. В Visual C++.NET 2003 и более поздних версиях объект создается лениво в первом запросе. Это изменение может привести к ошибкам в программах, использующих раннюю инициализацию.

См. также

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