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


Класс CComClassFactory2

Этот класс реализует интерфейс IClassFactory2 .

Синтаксис

template <class license>
class CComClassFactory2 : public IClassFactory2,
    public CComObjectRootEx<CComGlobalsThreadModel>,
    public license

Параметры

лицензия
Класс, реализующий следующие статические функции:

  • static BOOL VerifyLicenseKey( BSTR bstr );

  • static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );

  • static BOOL IsLicenseValid( );

Участники

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

Имя Описание
CComClassFactory2::CreateInstance Создает объект указанного CLSID.
CComClassFactory2::CreateInstanceLic При условии ключа лицензии создается объект указанного CLSID.
CComClassFactory2::GetLicInfo Извлекает сведения, описывающие возможности лицензирования фабрики классов.
CComClassFactory2::LockServer Блокирует фабрику классов в памяти.
CComClassFactory2::RequestLicKey Создает и возвращает ключ лицензии.

Замечания

CComClassFactory2реализует интерфейс IClassFactory2, который является расширением IClassFactory. IClassFactory2 управляет созданием объекта с помощью лицензии. Фабрика классов, выполняемая на лицензированном компьютере, может предоставить ключ лицензии во время выполнения. Этот ключ лицензии позволяет приложению создавать экземпляры объектов, если полная лицензия компьютера не существует.

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

class ATL_NO_VTABLE CMyClass2 :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyClass2, &CLSID_MyClass>,
   public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
   public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
   DECLARE_CLASSFACTORY2(CMyLicense)

   // Remainder of class declaration omitted

CMyLicense, параметр шаблона для CComClassFactory2, должен реализовать статические функции VerifyLicenseKey, GetLicenseKeyи IsLicenseValid. Ниже приведен пример простого класса лицензии:

class CMyLicense
{
protected:
   static BOOL VerifyLicenseKey(BSTR bstr)
   {
      USES_CONVERSION;
      return !lstrcmp(OLE2T(bstr), _T("My run-time license key"));
   }

   static BOOL GetLicenseKey(DWORD /*dwReserved*/, BSTR* pBstr) 
   {
      USES_CONVERSION;
      *pBstr = SysAllocString( T2OLE(_T("My run-time license key"))); 
      return TRUE;
   }

   static BOOL IsLicenseValid() {  return TRUE; }
};

CComClassFactory2 является производным от обоих CComClassFactory2Base и лицензий. CComClassFactory2Base, в свою очередь, является производным от IClassFactory2 и CComObjectRootEx< CComGlobalsThreadModel >.

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

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

Требования

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

CComClassFactory2::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.

Замечания

Требует, чтобы компьютер был полностью лицензирован. Если полная лицензия на компьютер не существует, вызовите CreateInstanceLic.

CComClassFactory2::CreateInstanceLic

Аналогично CreateInstance, за исключением того, что CreateInstanceLic требуется ключ лицензии.

STDMETHOD(CreateInstanceLic)(
    IUnknown* pUnkOuter,
    IUnknown* /* pUnkReserved
*/,
    REFIID riid,
    BSTR bstrKey,
    void** ppvObject);

Параметры

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

pUnkReserved
[in] Не используется. Должен иметь значение NULL.

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

bstrKey
[in] Ключ лицензии во время выполнения, полученный ранее из вызова RequestLicKey. Этот ключ необходим для создания объекта.

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

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

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

Замечания

Ключ лицензии можно получить с помощью RequestLicKey. Чтобы создать объект на нелицензированного компьютере, необходимо вызвать CreateInstanceLic.

CComClassFactory2::GetLicInfo

Заполняет структуру LICINFO сведениями, описывающими возможности лицензирования фабрики классов.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

Параметры

pLicInfo
[out] Указатель на структуру LICINFO .

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

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

Замечания

Член fRuntimeKeyAvail этой структуры указывает, позволяет ли фабрика классов создавать объекты на нелицензированного компьютера. Элемент fLicVerified указывает, существует ли полная лицензия на компьютер.

CComClassFactory2::LockServer

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

STDMETHOD(LockServer)(BOOL fLock);

Параметры

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

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

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

Замечания

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

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

CComClassFactory2::RequestLicKey

Создает и возвращает ключ лицензии, если fRuntimeKeyAvail элемент структуры LICINFO имеет значение TRUE.

STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);

Параметры

dwReserved
[in] Не используется. Должен равняться нулю.

pbstrKey
[out] Указатель на ключ лицензии.

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

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

Замечания

Ключ лицензии необходим для вызова CreateInstanceLic для создания объекта на нелицензированного компьютера. Если fRuntimeKeyAvail имеет значение FALSE, объекты могут создаваться только на полностью лицензированном компьютере.

Вызовите GetLicInfo , чтобы получить значение fRuntimeKeyAvail.

См. также

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