winrt::implements-Strukturvorlage (C++/WinRT)
Dies ist die Basis, von der ihre eigenen C++/WinRT-Implementierungen (von Laufzeitklassen und Aktivierungsfabriken) direkt oder indirekt abgeleitet werden. Es implementiert eine oder mehrere Windows-Runtime Schnittstellen (die Sie als Typparameter angeben) und bietet außerdem effiziente Implementierungen von IUnknown, IInspectable, IAgileObject, IWeakReferenceSource und anderen.
Hinweis
Weitere Informationen zum Ableiten von diesem Typ und Beispiele finden Sie unter Erstellen von APIs mit C++/WinRT.
Erweiterungspunkte auf winrt::implements
winrt::implements verfügt über Erweiterungspunkte , mit denen Sie die Zerstörung Ihrer Implementierungstypen verzögern, während der Zerstörung sicher Abfragen durchführen und den Einstieg in ihre projizierten Methoden und den Exit aus ihren projizierten Methoden einbinden können. Hier finden Sie die Namen der Erweiterungspunkte, zusammen mit Links zu Details und Codebeispielen.
- final_release. Weitere Informationen finden Sie unter Verzögerte Zerstörung und Sichere Abfragen während der Zerstörung.
- abi_enter, abi_exit und abi_guard. Weitere Informationen finden Sie unter Methodeneingabe- und -exit-Hooks.
Markertypen
Die Strukturvorlage implementiert mehrere Markertypen, die zum Überschreiben des Standardverhaltens verwendet werden. Wir gehen davon aus, dass diese nur selten verwendet werden; die Standardwerte reichen für fast alle Fälle aus. Ein Markertyp kann überall in der Schnittstellenliste angezeigt werden, d. h. das variatische Parameterpaket.
Die folgenden Markertypen werden von Implementierungen unterstützt:
- ummantelt<>
- Zusammensetzbare
- Zusammensetzen
- non_agile
- no_weak_ref
- no_module_lock
- static_lifetime (für Fabriken)
Dieses erste Beispiel gilt, wenn Sie direkt von Implementierungen ableiten.
struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
...
}
Dieses nächste Beispiel gilt, wenn Sie eine Laufzeitklasse erstellen.
struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
...
}
Syntax
template <typename D, typename... I>
struct implements
Vorlagenparameter
typename D
Ihr abgeleiteter Typname.
typename... I
Eine beliebige Anzahl von zu implementierenden Schnittstellen sowie alle gewünschten Markertypen.
Standardmäßig werden Schnittstellen, die von IInspectable abgeleitet werden, von der Implementierung der IInspectable::GetIids-Methode gemeldet. Verwenden Sie die cloaked
Markervorlage , um dies zu unterdrücken.
Beispiel
// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
IFrameworkView CreateView()
{
return ...
}
}
...
Anforderungen
Mindestens unterstütztes SDK: Windows SDK Version 10.0.17134.0 (Windows 10, Version 1803)
Namespace: winrt
Header: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (standardmäßig enthalten)
Memberfunktionen
Funktion | BESCHREIBUNG |
---|---|
implements::AddRef function | Erhöht die Verweisanzahl für die Standardschnittstelle des implements-Objekts . |
implements::find_inspectable-Funktion | TBD |
implementiert::find_interface-Funktion | Der Zeiger auf die Schnittstelle, die vom implementierten Objekt implementiert wird, das durch den angegebenen Bezeichner identifiziert wird; ruft AddRef nicht auf. |
implements::get_local_iids-Funktion | Ruft ein Tupel mit zwei Elementen ab, das die Bezeichner der Schnittstellen enthält, die vom implements-Objekt implementiert werden. |
implementiert::get_strong-Funktion | Ruft einen starken Verweis auf den Zeiger des implementierten Objekts ab. |
implements::get_weak-Funktion | Ruft einen schwachen Verweis auf diesen Zeiger des Implementiertobjekts ab. |
implements::QueryInterface-Funktion | Ruft den Zeiger auf die Schnittstelle ab, die vom implementierten Objekt implementiert wird, das durch den angegebenen Bezeichner identifiziert wird. ruft AddRef auf. |
implementiert::Release-Funktion | Verringert die Verweisanzahl für die Standardschnittstelle des implements-Objekts . |
Memberoperatoren
Operator | BESCHREIBUNG |
---|---|
implementiert::operator Windows::Foundation::IInspectable | Konvertiert das implementierte Objekt in ein Windows::Foundation::IInspectable. |
Datenmember
Datenelement | BESCHREIBUNG |
---|---|
m_inner | Greift ggf. auf das zusammengesetzte Objekt zu. Weitere Informationen finden Sie unter Runtime-Klassenableitung. |
implements::AddRef function
Erhöht die Verweisanzahl für die Standardschnittstelle des implements-Objekts .
Syntax
unsigned long __stdcall AddRef() noexcept;
Rückgabewert
Die neue Verweisanzahl. Dieser Wert ist nur für Testzwecke vorgesehen.
implements::find_inspectable-Funktion
Ruft den Zeiger auf die vom implements-Objekt implementierteIInspectable-Schnittstelle ab. Ruft AddRef nicht auf dem zurückgegebenen Zeiger auf. Mit dieser Funktion können Sie das implements-Objekt an eine Funktion übergeben, die eine IInspectable erwartet.
Syntax
::IInspectable* find_inspectable() const noexcept override;
Rückgabewert
Der Zeiger auf die IInspectable-Schnittstelle , die vom implements-Objekt implementiert wird.
implementiert::find_interface-Funktion
Ruft den Zeiger auf die Schnittstelle ab, die vom implementierungs-Objekt implementiert wird, das durch den angegebenen Bezeichner identifiziert wird. Ruft AddRef nicht auf dem zurückgegebenen Zeiger auf.
Syntax
void* find_interface(winrt::guid const& id) const noexcept override;
Rückgabewert
Der Zeiger auf die Schnittstelle, die vom implementierten Objekt implementiert wird, das durch den angegebenen Bezeichner identifiziert wird.
implements::get_local_iids-Funktion
Ruft ein Tupel mit zwei Elementen ab, das die Bezeichner der Schnittstellen enthält, die vom implements-Objekt implementiert werden. "Cloaked"-Schnittstellen sind nicht enthalten.
Syntax
std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;
Rückgabewert
Ein Tupel mit zwei Elementen, das die Anzahl und Bezeichner der Schnittstellen enthält, die vom implements-Objekt implementiert werden.
implementiert::get_strong-Funktion
Ruft einen starken Verweis auf diesen Zeiger des winrt::implements-Objekts ab. Siehe Starke und schwache Verweise in C++/WinRT. Da get_strong eine Memberfunktion der Strukturvorlage winrt::implements ist, können Sie sie nur von einem Objekt aufrufen, das direkt oder indirekt von winrt::implements abgeleitet ist, z. B. ein C++/WinRT-Objekt. Weitere Informationen für das Ableiten aus winrt::implements und Beispiele finden Sie unter Erstellen von APIs mit C++/WinRT.
Syntax
protected:
winrt::com_ptr<D> get_strong() noexcept;
Rückgabewert
Ein starker Verweis auf den implementiertdiesen Zeiger des Objekts.
implements::get_weak-Funktion
Ruft einen schwachen Verweis auf den zeiger des winrt::implements-Objekts ab. Siehe Starke und schwache Verweise in C++/WinRT. Da get_weak eine Memberfunktion der winrt::implements-Strukturvorlage ist, können Sie sie nur von einem Objekt aufrufen, das direkt oder indirekt von winrt::implements abgeleitet ist, z. B. ein C++/WinRT-Objekt. Weitere Informationen für das Ableiten aus winrt::implements und Beispiele finden Sie unter Erstellen von APIs mit C++/WinRT.
Syntax
protected:
winrt::weak_ref<D> get_weak() noexcept;
Rückgabewert
Ein weak_ref -Objekt, das einen schwachen Verweis auf den -Zeiger des -Objekts darstellt.
implements::QueryInterface-Funktion
Ruft den Zeiger auf die Schnittstelle ab, die vom implements-Objekt implementiert wird, das durch den angegebenen Bezeichner identifiziert wird. Ruft AddRef für den zurückgegebenen Zeiger auf.
Syntax
HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;
Rückgabewert
Die neue Verweisanzahl. Dieser Wert ist nur für Testzwecke vorgesehen.
implements::Release-Funktion
Verringert die Verweisanzahl für die Standardschnittstelle des implements-Objekts .
Syntax
unsigned long __stdcall Release() noexcept;
Rückgabewert
Die neue Verweisanzahl. Dieser Wert ist nur für Testzwecke vorgesehen.
implements::operator Windows::Foundation::IInspectable
Konvertiert das implementierungs-Objekt in ein Windows::Foundation::IInspectable-Objekt. Mit diesem Operator können Sie das implements-Objekt an eine Funktion übergeben, die eine IInspectable erwartet.
Syntax
operator winrt::Windows::Foundation::IInspectable() const noexcept;
Rückgabewert
Der implementiert das -Objekt, das in ein Windows::Foundation::IInspectable konvertiert wird.