Klasa CComClassFactory
Ta klasa implementuje interfejs IClassFactory .
Składnia
class CComClassFactory
: public IClassFactory,
public CComObjectRootEx<CComGlobalsThreadModel>
Elementy członkowskie
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CComClassFactory::CreateInstance | Tworzy obiekt określonego identyfikatora CLSID. |
CComClassFactory::LockServer | Blokuje fabrykę klas w pamięci. |
Uwagi
CComClassFactory
implementuje interfejs IClassFactory , który zawiera metody tworzenia obiektu określonego identyfikatora CLSID, a także blokowanie fabryki klas w pamięci w celu umożliwienia szybszego tworzenia nowych obiektów. IClassFactory
Należy zaimplementować dla każdej klasy, która jest rejestrowana w rejestrze systemowym i do której przypisujesz identyfikator CLSID.
Obiekty ATL zwykle uzyskują fabrykę klas, wyprowadzając je z klasy CComCoClass. Ta klasa zawiera DECLARE_CLASSFACTORY makra, które deklaruje CComClassFactory
jako domyślną fabrykę klas. Aby zastąpić tę wartość domyślną, określ jedno z DECLARE_CLASSFACTORY
makr XXX w definicji klasy. Na przykład makro DECLARE_CLASSFACTORY_EX używa określonej klasy dla fabryki klas:
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.
Powyższa definicja klasy określa, że CMyClassFactory
będzie używany jako domyślna fabryka klas obiektu. CMyClassFactory
musi pochodzić z i CComClassFactory
zastąpić CreateInstance
.
ATL udostępnia trzy inne makra, które deklarują fabrykę klas:
DECLARE_CLASSFACTORY2 używa klasy CComClassFactory2, która kontroluje tworzenie za pośrednictwem licencji.
DECLARE_CLASSFACTORY_AUTO_THREAD używa klasy CComClassFactoryAutoThread, która tworzy obiekty w wielu mieszkaniach.
DECLARE_CLASSFACTORY_SINGLETON używa klasy CComClassFactorySingleton, która tworzy pojedynczy obiekt CComObjectGlobal.
Wymagania
Nagłówek: atlcom.h
CComClassFactory::CreateInstance
Tworzy obiekt określonego identyfikatora CLSID i pobiera wskaźnik interfejsu do tego obiektu.
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
Parametry
pUnkOuter
[in] Jeśli obiekt jest tworzony w ramach agregacji, element pUnkOuter musi być zewnętrznym nieznanym obiektem. W przeciwnym razie pUnkOuter musi mieć wartość NULL.
riid
[in] Identyfikator IID żądanego interfejsu. Jeśli parametr pUnkOuter ma wartość inną niż NULL, riid musi mieć wartość IID_IUnknown
.
ppvObj
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez riid. Jeśli obiekt nie obsługuje tego interfejsu, parametr ppvObj ma wartość NULL.
Wartość zwracana
Standardowa wartość HRESULT.
CComClassFactory::LockServer
Zwiększa i dekrementuje liczbę blokad modułu przez wywołanie _Module::Lock
i _Module::Unlock
, odpowiednio.
STDMETHOD(LockServer)(BOOL fLock);
Parametry
stado
[in] Jeśli wartość TRUE, liczba blokad jest zwiększana; w przeciwnym razie liczba blokad jest dekrementowana.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
_Module
odwołuje się do wystąpienia globalnego CComModule lub klasy pochodnej.
Wywołanie LockServer
umożliwia klientowi trzymanie się fabryki klas, dzięki czemu można szybko utworzyć wiele obiektów.
Zobacz też
Klasa CComObjectRootEx
CComGlobalsThreadModel
Omówienie klasy