Discussion Community

IT Acumens Forum => Programming Discussions for Engineers => Programming in "Vc++" => Topic started by: sukishan on Aug 13, 2009, 06:49 PM

Title: CComClassFactory Class
Post by: sukishan on Aug 13, 2009, 06:49 PM
class CComClassFactory : public IClassFactory,
   public CComObjectRootEx< CComGlobalsThreadModel >

CComClassFactory implements the IClassFactory interface, which contains methods for creating an object of a particular CLSID, as well as locking the class factory in memory to allow new objects to be created more quickly. IClassFactory must be implemented for every class that you register in the system registry and to which you assign a CLSID.

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 override this default, specify one of the DECLARE_CLASSFACTORYXXX macros in your class definition. For example, the DECLARE_CLASSFACTORY_EX macro uses the specified class for the class factory:

Visual C++ 
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>

   // Remainder of class declaration omitted.

The above class definition specifies that CMyClassFactory will be used as the object's default class factory. CMyClassFactory must derive from CComClassFactory and override CreateInstance.

ATL provides three other macros that declare a class factory:

DECLARE_CLASSFACTORY2   Uses CComClassFactory2, which controls creation through a license.

DECLARE_CLASSFACTORY_AUTO_THREAD   Uses CComClassFactoryAutoThread, which creates objects in multiple apartments.

DECLARE_CLASSFACTORY_SINGLETON   Uses CComClassFactorySingleton, which constructs a single CComObjectGlobal object.