CComClassFactory2 Class
This class implements the IClassFactory2 interface.
template < class license > class CComClassFactory2 : public IClassFactory2, public CComObjectRootEx<CComGlobalsThreadModel>, public license
CComClassFactory2 implements the IClassFactory2 interface, which is an extension of IClassFactory. IClassFactory2 controls object creation through a license. A class factory executing on a licensed machine can provide a run-time license key. This license key allows an application to instantiate objects when a full machine license does not exist.
ATL objects normally acquire a class factory by deriving from CComCoClass. This class includes the macro DECLARE_CLASSFACTORY, which declares CComClassFactory as the default class factory. To use CComClassFactory2, specify the DECLARE_CLASSFACTORY2 macro in your object's class definition. For example:
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, the template parameter to CComClassFactory2, must implement the static functions VerifyLicenseKey, GetLicenseKey, and IsLicenseValid. The following is an example of a simple license class:
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 derives from both CComClassFactory2Base and license. CComClassFactory2Base, in turn, derives from IClassFactory2 and CComObjectRootEx< CComGlobalsThreadModel >.