Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vytvoří typ inteligentního ukazatele , který představuje rozhraní určené parametrem šablony. ComPtr automaticky udržuje počet odkazů pro ukazatel základního rozhraní a uvolní rozhraní, když počet odkazů přejde na nulu.
Syntaxe
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
Parametry
T
Rozhraní, které ComPtr představuje.
U
Třída, ke které je aktuální ComPtr přítel. (Šablona, která používá tento parametr, je chráněna.)
Poznámky
ComPtr<> deklaruje typ, který představuje základní ukazatel rozhraní. Slouží ComPtr<> k deklaraci proměnné a pak pomocí operátoru přístupu člena šipky (->) získat přístup k členské funkci rozhraní.
Další informace o inteligentních ukazatelích najdete v pododdílu "Inteligentní ukazatele MODELU COM" v článku Postupy kódování modelu COM.
Členové
Veřejné definice typedef
| Název | Popis |
|---|---|
InterfaceType |
Synonymum pro typ určený parametrem T šablony. |
Veřejné konstruktory
| Název | Popis |
|---|---|
ComPtr::ComPtr |
Inicializuje novou instanci ComPtr třídy. Přetížení poskytují výchozí konstruktory, kopírovat, přesouvat a konverzní konstruktory. |
ComPtr::~ComPtr |
Deinicializuje instanci ComPtr. |
Veřejné metody
| Název | Popis |
|---|---|
ComPtr::As |
ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným parametrem šablony. |
ComPtr::AsIID |
ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným ID rozhraní. |
ComPtr::AsWeak |
Načte slabý odkaz na aktuální objekt. |
ComPtr::Attach |
Přidruží ho ComPtr k typu rozhraní určenému parametrem aktuálního typu šablony. |
ComPtr::CopyTo |
Zkopíruje aktuální nebo zadané rozhraní přidružené k tomuto ComPtr ukazateli na zadaný výstupní ukazatel. |
ComPtr::Detach |
Oddružuje ho ComPtr od rozhraní, které představuje. |
ComPtr::Get |
Načte ukazatel na rozhraní, které je přidruženo k tomuto ComPtr. |
ComPtr::GetAddressOf |
Načte adresu datového členu ptr_ , který obsahuje ukazatel na rozhraní reprezentované tímto ComPtr. |
ComPtr::ReleaseAndGetAddressOf |
Uvolní rozhraní přidružené k tomuto ComPtr a pak načte adresu datového ptr_ členu, který obsahuje ukazatel na rozhraní, které bylo vydáno. |
ComPtr::Reset |
Uvolní rozhraní přidružené k tomuto ComPtr a vrátí nový počet odkazů. |
ComPtr::Swap |
Vymění rozhraní spravovaného aktuálním ComPtr rozhraním s rozhraním spravovaným zadaným ComPtr. |
Chráněné metody
| Název | Popis |
|---|---|
ComPtr::InternalAddRef |
Zvýší počet odkazů rozhraní přidruženého k tomuto ComPtrrozhraní . |
ComPtr::InternalRelease |
Provede operaci uvolnění modelu COM na rozhraní přidružené k tomuto ComPtr. |
Veřejné operátory
| Název | Popis |
|---|---|
ComPtr::operator& |
Načte adresu aktuálního ComPtr. |
ComPtr::operator-> |
Načte ukazatel na typ určený aktuálním parametrem šablony. |
ComPtr::operator= |
Přiřadí hodnotu aktuálnímu ComPtr. |
ComPtr::operator== |
Určuje, zda jsou dva ComPtr objekty stejné. |
ComPtr::operator!= |
Určuje, jestli se dva ComPtr objekty nerovnají. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
Určuje, zda ComPtr je správa životnosti objektu rozhraní. |
Chráněné datové členy
| Název | Popis |
|---|---|
ComPtr::ptr_ |
Obsahuje ukazatel na rozhraní, které je přidruženo a spravováno tímto ComPtr. |
Hierarchie dědičnosti
ComPtr
Požadavky
Záhlaví: client.h
Obor názvů: Microsoft::WRL
ComPtr::~ComPtr
Deinicializuje instanci ComPtr.
WRL_NOTHROW ~ComPtr();
ComPtr::As
ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným parametrem šablony.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Parametry
U
Rozhraní, které má být reprezentováno parametrem p.
p
Objekt ComPtr , který představuje rozhraní určené parametrem U. Parametr p nesmí odkazovat na aktuální ComPtr objekt.
Poznámky
První šablona je formulář, který byste měli použít v kódu. Druhá šablona je interní pomocná specializace. Podporuje funkce jazyka C++, jako je klíčové slovo odpočtu auto typu.
Návratová hodnota
S_OK v případě úspěchu; jinak označuje HRESULT chybu.
ComPtr::AsIID
ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným ID rozhraní.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Parametry
riid
ID rozhraní.
p
Pokud má objekt rozhraní, jehož ID se rovná riid, doubly nepřímý ukazatel na rozhraní určené parametrem riid . V opačném případě ukazatel na IUnknown.
Návratová hodnota
S_OK v případě úspěchu; jinak označuje HRESULT chybu.
ComPtr::AsWeak
Načte slabý odkaz na aktuální objekt.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
Parametry
pWeakRef
Po dokončení této operace je ukazatel na slabý referenční objekt.
Návratová hodnota
S_OK v případě úspěchu; v opačném případě hodnota HRESULT označující chybu.
ComPtr::Attach
Přidruží ho ComPtr k typu rozhraní určenému parametrem aktuálního typu šablony.
void Attach(
_In_opt_ InterfaceType* other
);
Parametry
other
Typ rozhraní.
ComPtr::ComPtr
Inicializuje novou instanci ComPtr třídy. Přetížení poskytují výchozí konstruktory, kopírovat, přesouvat a konverzní konstruktory.
WRL_NOTHROW ComPtr();
WRL_NOTHROW ComPtr(
decltype(__nullptr)
);
template<class U>
WRL_NOTHROW ComPtr(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr(
const ComPtr& other
);
template<class U>
WRL_NOTHROW ComPtr(
const ComPtr<U> &other,
typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
WRL_NOTHROW ComPtr(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr(
_Inout_ ComPtr<U>&& other, typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
Parametry
U
Typ parametru other.
other
Objekt typu U.
Návratová hodnota
Poznámky
První konstruktor je výchozí konstruktor, který implicitně vytvoří prázdný objekt. Druhý konstruktor určuje __nullptr, který explicitně vytvoří prázdný objekt.
Třetí konstruktor vytvoří objekt z objektu určeného ukazatelem. Nyní ComPtr vlastní odkaz na paměť a udržuje do ní počet odkazů.
Čtvrtý a pátý konstruktor jsou konstruktory kopírování. Pátý konstruktor zkopíruje objekt, pokud je konvertibilní na aktuální typ.
Šestý a sedmý konstruktor jsou konstruktory přesunutí. Sedmý konstruktor přesune objekt, pokud je převoditelný na aktuální typ.
ComPtr::CopyTo
Zkopíruje aktuální nebo zadané rozhraní přidružené k tomuto ComPtr ukazateli.
HRESULT CopyTo(
_Deref_out_ InterfaceType** ptr
);
HRESULT CopyTo(
REFIID riid,
_Deref_out_ void** ptr
) const;
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
) const;
Parametry
U
Název typu.
ptr
Po dokončení této operace ukazatel na požadované rozhraní.
riid
ID rozhraní.
Návratová hodnota
S_OK v případě úspěchu; jinak označuje, HRESULT proč implicitní QueryInterface operace selhala.
Poznámky
První funkce vrátí kopii ukazatele na rozhraní přidružené k tomuto ComPtr. Tato funkce vždy vrátí S_OK.
Druhá funkce provede QueryInterface operaci na rozhraní přidruženém k tomuto ComPtr rozhraní pro rozhraní určené parametrem riid .
Třetí funkce provádí QueryInterface operaci na rozhraní přidruženém k tomuto ComPtr rozhraní pro základní rozhraní parametru U .
ComPtr::Detach
Oddružuje tento ComPtr objekt od rozhraní, které představuje.
T* Detach();
Návratová hodnota
Ukazatel na rozhraní, které bylo reprezentováno tímto ComPtr objektem.
ComPtr::Get
Načte ukazatel na rozhraní, které je přidruženo k tomuto ComPtr.
T* Get() const;
Návratová hodnota
Ukazatel na rozhraní, které je přidruženo k tomuto ComPtr.
ComPtr::GetAddressOf
Načte adresu datového členu ptr_ , který obsahuje ukazatel na rozhraní reprezentované tímto ComPtr.
T* const* GetAddressOf() const;
T** GetAddressOf();
Návratová hodnota
Adresa proměnné.
ComPtr::InternalAddRef
Zvýší počet odkazů rozhraní přidruženého k tomuto ComPtrrozhraní .
void InternalAddRef() const;
Poznámky
Tato metoda je chráněna.
ComPtr::InternalRelease
Provede operaci uvolnění modelu COM na rozhraní přidružené k tomuto ComPtr.
unsigned long InternalRelease();
Poznámky
Tato metoda je chráněna.
ComPtr::operator&
Uvolní rozhraní přidružené k tomuto ComPtr objektu a pak načte adresu objektu ComPtr .
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Návratová hodnota
Slabý odkaz na aktuální ComPtr.
Poznámky
Tato metoda se liší od ComPtr::GetAddressOf toho, že tato metoda uvolní odkaz na ukazatel rozhraní. Použijte ComPtr::GetAddressOf , pokud potřebujete adresu ukazatele rozhraní, ale nechcete toto rozhraní uvolnit.
ComPtr::operator->
Načte ukazatel na typ určený aktuálním parametrem šablony.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Návratová hodnota
Ukazatel na typ určený názvem aktuálního typu šablony.
Poznámky
Tato pomocná funkce odebere nepotřebnou režii způsobenou použitím makra STDMETHOD. Tato funkce vytváří IUnknown typy private místo virtual.
ComPtr::operator=
Přiřadí hodnotu aktuálnímu ComPtr.
WRL_NOTHROW ComPtr& operator=(
decltype(__nullptr)
);
WRL_NOTHROW ComPtr& operator=(
_In_opt_ T *other
);
template <typename U>
WRL_NOTHROW ComPtr& operator=(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr& operator=(
const ComPtr &other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
const ComPtr<U>& other
);
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr<U>&& other
);
Parametry
U
Třída.
other
Ukazatel, odkaz nebo rvalue odkaz na typ nebo jiný ComPtr.
Návratová hodnota
Odkaz na aktuální ComPtr.
Poznámky
První verze tohoto operátoru přiřadí aktuální hodnotě ComPtr.
Ve druhé verzi, pokud přiřazení ukazatele rozhraní není stejné jako aktuální ComPtr ukazatel rozhraní, druhý ukazatel rozhraní je přiřazen k aktuální ComPtr.
Ve třetí verzi je přiřazen ukazatel rozhraní přiřazení k aktuálnímu ComPtr.
Ve čtvrté verzi platí, že pokud ukazatel rozhraní přiřazující hodnoty není stejný jako aktuální ComPtr ukazatel rozhraní, druhý ukazatel rozhraní je přiřazen k aktuálnímu ComPtr.
Pátá verze je operátor kopírování; odkaz na určitý ComPtr je přiřazen k aktuálnímu ComPtr.
Šestá verze je operátor kopírování, který používá sémantiku přesunutí; rvalue odkaz na ComPtr případný typ je statické přetypování a pak přiřazen k aktuálnímu ComPtr.
Sedmá verze je operátor kopírování, který používá sémantiku přesunutí; rvalue odkaz na typ ComPtr U je statické přetypování pak a přiřazen k aktuálnímu ComPtr.
ComPtr::operator==
Určuje, zda jsou dva ComPtr objekty stejné.
bool operator==(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator==(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator==(
decltype(__nullptr),
const ComPtr<T>& a
);
Parametry
a
Odkaz na ComPtr objekt.
b
Odkaz na jiný ComPtr objekt.
Návratová hodnota
První operátor získá true hodnotu, je-li objekt a roven objektu b; v opačném případě false.
Druhé a třetí operátory poskytují true , pokud je objekt a roven nullptr; v opačném případě false.
ComPtr::operator!=
Určuje, jestli se dva ComPtr objekty nerovnají.
bool operator!=(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator!=(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator!=(
decltype(__nullptr),
const ComPtr<T>& a
);
Parametry
a
Odkaz na ComPtr objekt.
b
Odkaz na jiný ComPtr objekt.
Návratová hodnota
První operátor získá hodnotu, pokud se objekt nerovná true objektub; jinak false.a
Druhý a třetí operátory poskytují true , pokud objekt a není roven nullptr; v opačném případě false.
ComPtr::operator Microsoft::WRL::Details::BoolType
Určuje, zda ComPtr je správa životnosti objektu rozhraní.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Návratová hodnota
Pokud je k tomuto ComPtrrozhraní přidruženo rozhraní, adresa datového členuBoolStruct::Member, jinak . nullptr
ComPtr::ptr_
Obsahuje ukazatel na rozhraní, které je přidruženo a spravováno tímto ComPtr.
InterfaceType *ptr_;
Poznámky
ptr_ je interní chráněný datový člen.
ComPtr::ReleaseAndGetAddressOf
Uvolní rozhraní přidružené k tomuto ComPtr a pak načte adresu datového ptr_ členu, který obsahuje ukazatel na rozhraní, které bylo vydáno.
T** ReleaseAndGetAddressOf();
Návratová hodnota
Adresa datového člena ptr_ tohoto ComPtr.
ComPtr::Reset
Uvolní rozhraní přidružené k tomuto ComPtr a vrátí nový počet odkazů.
unsigned long Reset();
Návratová hodnota
Počet odkazů zbývajících na podkladové rozhraní, pokud existuje.
ComPtr::Swap
Vymění rozhraní spravovaného aktuálním ComPtr rozhraním s rozhraním spravovaným zadaným ComPtr.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Parametry
r
Úloha ComPtr.