CComObject – třída
Tato třída implementuje IUnknown
pro neagregovaný objekt.
Syntaxe
template<class Base>
class CComObject : public Base
Parametry
Základna
Třída odvozená z CComObjectRoot nebo CComObjectRootEx, stejně jako z jakéhokoli jiného rozhraní, které chcete podporovat u objektu.
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CComObject::CComObject | Konstruktor |
CComObject::~CComObject | Destruktor. |
Veřejné metody
Název | Popis |
---|---|
CComObject::AddRef | Zvýší počet odkazů na objekt. |
CComObject::CreateInstance | (Statické) Vytvoří nový CComObject objekt. |
CComObject::QueryInterface | Načte ukazatel na požadované rozhraní. |
CComObject::Release | Sníží počet odkazů na objekt. |
Poznámky
CComObject
implementuje IUnknown pro neagregovaný objekt. Nicméně, volání QueryInterface
, AddRef
a Release
jsou delegovány na CComObjectRootEx
.
Další informace o použití CComObject
naleznete v článku Základy ATL COM Objekty.
Hierarchie dědičnosti
Base
CComObject
Požadavky
Hlavička: atlcom.h
CComObject::AddRef
Zvýší počet odkazů na objekt.
STDMETHOD_(ULONG, AddRef)();
Návratová hodnota
Tato funkce vrátí nový přírůstek počtu odkazů na objekt. Tato hodnota může být užitečná pro diagnostiku nebo testování.
CComObject::CComObject
Konstruktor zvýší počet zámků modulu.
CComObject(void* = NULL);
Parametry
prázdnota*
[v] Tento nepojmenovaný parametr se nepoužívá. Existuje pro symetrii s jinými CComXXXObjectXXX
konstruktory.
Poznámky
Destruktor ho dekrementuje.
CComObject
Pokud je objekt -odvozený úspěšně vytvořen pomocí operátorunew
, počáteční počet odkazů je 0. Chcete-li nastavit počet odkazů na správnou hodnotu (1), proveďte volání funkce AddRef .
CComObject::~CComObject
Destruktor.
CComObject();
Poznámky
Uvolní všechny přidělené prostředky, zavolá FinalRelease a sníží počet zámků modulu.
CComObject::CreateInstance
Tato statická funkce umožňuje vytvořit nový objekt CComObjectBase
>< bez režie NaCreateInstance.
static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);
Parametry
Pp
[ven] Ukazatel na ukazatel CComObject><Base
. Pokud CreateInstance
je neúspěšný, hodnota pp je nastavena na hodnotu NULL.
Návratová hodnota
Standardní hodnota HRESULT.
Poznámky
Vrácený objekt má počet odkazů na nulu, takže volání AddRef
okamžitě použijte Release
k uvolnění odkazu na ukazatel objektu, jakmile budete hotovi.
Pokud nepotřebujete přímý přístup k objektu, ale přesto chcete vytvořit nový objekt bez režijních CoCreateInstance
nákladů , použijte místo toho CComCoClass::CreateInstance .
Příklad
class ATL_NO_VTABLE CMyCircle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyCircle, &CLSID_MyCircle>,
public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CMyCircle()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)
DECLARE_NOT_AGGREGATABLE(CMyCircle)
BEGIN_COM_MAP(CMyCircle)
COM_INTERFACE_ENTRY(IMyCircle)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
public:
STDMETHOD(get_XCenter)(double* pVal);
};
// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));
// Increment reference count immediately
pCircle->AddRef();
// Access method of COM object
hRes = pCircle->get_XCenter(&x);
// Decrement reference count when done
pCircle->Release();
pCircle = NULL;
CComObject::QueryInterface
Načte ukazatel na požadované rozhraní.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);
Parametry
iid
[v] Identifikátor požadovaného rozhraní.
ppvObject
[ven] Ukazatel na ukazatel rozhraní identifikovaný pomocí iid. Pokud objekt nepodporuje toto rozhraní, ppvObject je nastaven na HODNOTU NULL.
Pp
[ven] Ukazatel na ukazatel rozhraní identifikovaný podle typu Q
. Pokud objekt nepodporuje toto rozhraní, pp je nastavena na HODNOTU NULL.
Návratová hodnota
Standardní hodnota HRESULT.
CComObject::Release
Sníží počet odkazů na objekt.
STDMETHOD_(ULONG, Release)();
Návratová hodnota
Tato funkce vrátí nový dekrementovaný počet odkazů na objekt. V buildech ladění může být návratová hodnota užitečná pro diagnostiku nebo testování. V neladit sestavení vždy Release
vrátí hodnotu 0.
Viz také
CComAggObject – třída
CComPolyObject – třída
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Přehled třídy