CComClassFactory – třída
Tato třída implementuje IClassFactory rozhraní.
Syntaxe
class CComClassFactory
: public IClassFactory,
public CComObjectRootEx<CComGlobalsThreadModel>
Členové
Veřejné metody
Název | Popis |
---|---|
CComClassFactory::CreateInstance | Vytvoří objekt zadaného CLSID. |
CComClassFactory::LockServer | Uzamkne objekt pro vytváření tříd v paměti. |
Poznámky
CComClassFactory
implementuje IClassFactory rozhraní, které obsahuje metody pro vytvoření objektu konkrétní CLSID, stejně jako uzamčení objektu pro vytváření tříd v paměti, aby bylo možné vytvářet nové objekty rychleji. IClassFactory
musí být implementována pro každou třídu, kterou zaregistrujete v systémovém registru a ke které přiřadíte CLSID.
Objekty ATL obvykle získávají objekt pro vytváření tříd odvozením z CComCoClass. Tato třída obsahuje DECLARE_CLASSFACTORY makra, které deklaruje CComClassFactory
jako výchozí objekt pro vytváření tříd. Chcete-li toto výchozí nastavení přepsat, zadejte jedno z DECLARE_CLASSFACTORY
maker XXX v definici třídy. Například makro DECLARE_CLASSFACTORY_EX používá zadanou třídu pro továrnu tříd:
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>
{
public:
DECLARE_CLASSFACTORY_EX(CMyClassFactory)
// Remainder of class declaration omitted.
Výše uvedená definice třídy určuje, že CMyClassFactory
se použije jako výchozí objekt pro vytváření tříd objektu. CMyClassFactory
musí odvodit a CComClassFactory
přepsat CreateInstance
.
ATL poskytuje tři další makra, která deklarují objekt pro vytváření tříd:
DECLARE_CLASSFACTORY2 používá CComClassFactory2, který řídí vytváření prostřednictvím licence.
DECLARE_CLASSFACTORY_AUTO_THREAD používá CComClassFactoryAutoThread, který vytváří objekty ve více apartmánech.
DECLARE_CLASSFACTORY_SINGLETON používá CComClassFactorySingleton, který vytváří jeden objekt CComObjectGlobal.
Požadavky
Hlavička: atlcom.h
CComClassFactory::CreateInstance
Vytvoří objekt zadaného CLSID a načte ukazatel rozhraní na tento objekt.
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
Parametry
pUnkOuter
[v] Pokud se objekt vytváří jako součást agregace, musí být pUnkOuter vnějším neznámým objektem. V opačném případě musí být hodnota pUnkOuter null.
riid
[v] IID požadovaného rozhraní. Pokud hodnota pUnkOuter není null, riid musí být IID_IUnknown
.
ppvObj
[ven] Ukazatel na ukazatel rozhraní identifikovaný riidem. Pokud objekt nepodporuje toto rozhraní, ppvObj je nastaven na HODNOTU NULL.
Návratová hodnota
Standardní hodnota HRESULT.
CComClassFactory::LockServer
Zvýší a sníží počet zámků modulu voláním _Module::Lock
a _Module::Unlock
v uvedeném pořadí.
STDMETHOD(LockServer)(BOOL fLock);
Parametry
hejno
[v] Je-li pravda, počet zámků se zvýší; jinak se počet zámků sníží.
Návratová hodnota
Standardní hodnota HRESULT.
Poznámky
_Module
odkazuje na globální instanci CComModule nebo třídy odvozené z ní.
Volání LockServer
umožňuje klientovi držet se objektu pro vytváření tříd, aby bylo možné rychle vytvořit více objektů.
Viz také
CComObjectRootEx – třída
CComGlobalsThreadModel
Přehled třídy