Класс 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
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_IUnknown
riid.
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_IUnknown
riid.
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
Общие сведения о классе