winrt::implements, modèle de struct (C++/WinRT)
Il s’agit de la base à partir de laquelle dérivent directement ou indirectement vos propres implémentations C++/WinRT (de classes runtime et de fabriques d’activation). Il implémente une ou plusieurs interfaces Windows Runtime (que vous lui spécifiez en tant que paramètres de type) et fournit également des implémentations efficaces de IUnknown, IInspectable, IAgileObject, IWeakReferenceSource, etc.
Notes
Pour plus d’informations sur la dérivation à partir de ce type et des exemples, consultez Créer des API avec C++/WinRT.
Points d’extension sur winrt ::implements
winrt ::implements a des points d’extension qui vous permettent de différer la destruction de vos types d’implémentation, d’interroger en toute sécurité pendant la destruction et de raccorder l’entrée et la sortie de vos méthodes projetées. Voici les noms des points d’extension, ainsi que des liens vers des détails et des exemples de code.
- final_release. Consultez Destruction différée et Requêtes sécurisées pendant la destruction.
- abi_enter, abi_exit et abi_guard. Consultez Crochets d’entrée et de sortie de méthode.
Types de marqueurs
Le modèle de struct implémente prend en charge plusieurs types de marqueurs qui sont utilisés pour remplacer le comportement par défaut. Nous nous attendons à ce qu’ils ne soient que rarement utilisés ; les valeurs par défaut sont suffisantes pour presque tous les cas. Un type de marqueur peut apparaître n’importe où dans la liste d’interface, qui est le pack de paramètres variadique.
Les types de marqueurs suivants sont pris en charge par les implémentations :
- masqué je<>
- Composables
- composition
- non_agile
- no_weak_ref
- no_module_lock
- static_lifetime (pour les usines)
Ce premier exemple s’applique lorsque vous dérivez directement des implémentations.
struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
...
}
Cet exemple suivant concerne la création d’une classe runtime.
struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
...
}
Syntax
template <typename D, typename... I>
struct implements
Paramètres de modèle
typename D
Nom de votre type dérivé.
typename... I
Nombre d’interfaces à implémenter, ainsi que tous les types de marqueurs souhaités.
Par défaut, les interfaces qui dérivent de IInspectable sont signalées par l’implémentation de la méthode IInspectable ::GetIids . Utilisez le cloaked
modèle de marqueur pour supprimer cela.
Exemple
// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
IFrameworkView CreateView()
{
return ...
}
}
...
Configuration requise
Kit de développement logiciel (SDK) minimum pris en charge : Sdk Windows version 10.0.17134.0 (Windows 10, version 1803)
Espace de noms : winrt
En-tête : %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (inclus par défaut)
Fonctions Membre
Fonction | Description |
---|---|
implements ::AddRef, fonction | Incrémente le nombre de références pour l’interface par défaut de l’objet implements . |
implements ::find_inspectable, fonction | TBD |
implements ::find_interface, fonction | Pointeur vers l’interface implémentée par l’objet implémente , identifié par l’identificateur spécifié ; n’appelle pas AddRef. |
implements ::get_local_iids, fonction | Récupère un tuple à deux éléments contenant les identificateurs des interfaces implémentées par l’objet implements . |
implements ::get_strong, fonction | Récupère une référence forte au pointeur this de l’objet implémente. |
implements::get_weak, fonction | Récupère une référence faible au pointeur this de l’objet implémente. |
implements ::QueryInterface, fonction | Récupère le pointeur vers l’interface implémentée par l’objet implements , identifié par l’identificateur spécifié ; appelle AddRef. |
implements ::Release, fonction | Décrémente le nombre de références pour l’interface par défaut de l’objet implémente . |
Opérateurs membres
Opérateur | Description |
---|---|
implements ::operator Windows ::Foundation ::IInspectable | Convertit l’objet implémente en Windows ::Foundation ::IInspectable. |
Membres de données
Membre de données | Description |
---|---|
m_inner | Accède à l’objet composé , le cas échéant. Pour plus d’informations, consultez Dérivation de classe Runtime. |
implements ::AddRef, fonction
Incrémente le nombre de références pour l’interface par défaut de l’objet implements .
Syntaxe
unsigned long __stdcall AddRef() noexcept;
Valeur de retour
Nouveau nombre de références. Cette valeur est destinée à être utilisée uniquement à des fins de test.
implements ::find_inspectable, fonction
Récupère le pointeur vers l’interface IInspectable implémentée par l’objet implements . N’appelle pas AddRef sur le pointeur qu’il retourne. Cette fonction vous permet de passer l’objet implements à une fonction qui attend un IInspectable.
Syntaxe
::IInspectable* find_inspectable() const noexcept override;
Valeur de retour
Pointeur vers l’interface IInspectable implémentée par l’objet implements .
implements ::find_interface, fonction
Récupère le pointeur vers l’interface implémentée par l’objet implements , identifié par l’identificateur spécifié. N’appelle pas AddRef sur le pointeur qu’il retourne.
Syntaxe
void* find_interface(winrt::guid const& id) const noexcept override;
Valeur de retour
Pointeur vers l’interface implémentée par l’objet implémente , identifié par l’identificateur spécifié.
implements ::get_local_iids, fonction
Récupère un tuple à deux éléments contenant les identificateurs des interfaces implémentées par l’objet implements . Les interfaces « masquées » ne sont pas incluses.
Syntaxe
std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;
Valeur de retour
Tuple à deux éléments contenant le nombre et les identificateurs des interfaces implémentées par l’objet implements .
implements ::get_strong, fonction
Récupère une référence forte à ce pointeur de l’objet winrt ::implements. Consultez Références fortes et faibles en C++/WinRT. Étant donné que get_strong est une fonction membre du modèle de struct winrt ::implements , vous pouvez l’appeler uniquement à partir d’un objet qui dérive directement ou indirectement de winrt ::implements, tel qu’un objet C++/WinRT. Pour plus d’informations sur la dérivation à partir de winrt::implements, et pour obtenir des exemples, consultez Créer des API avec C++/WinRT.
Syntaxe
protected:
winrt::com_ptr<D> get_strong() noexcept;
Valeur de retour
Référence forte à l’objet implémentece pointeur.
implements::get_weak, fonction
Récupère une référence faible au pointeur this de l’objet winrt ::implements. Consultez Références fortes et faibles en C++/WinRT. Étant donné que get_weak est une fonction membre du modèle de struct winrt ::implements , vous pouvez l’appeler uniquement à partir d’un objet qui dérive directement ou indirectement de winrt ::implements, tel qu’un objet C++/WinRT. Pour plus d’informations sur la dérivation à partir de winrt::implements, et pour obtenir des exemples, consultez Créer des API avec C++/WinRT.
Syntaxe
protected:
winrt::weak_ref<D> get_weak() noexcept;
Valeur de retour
Objet weak_ref représentant une référence faible au pointeur de l’objetimplémente.
implements ::QueryInterface, fonction
Récupère le pointeur vers l’interface implémentée par l’objet implements , identifié par l’identificateur spécifié. Appelle AddRef sur le pointeur qu’il retourne.
Syntaxe
HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;
Valeur de retour
Nouveau nombre de références. Cette valeur est destinée à être utilisée uniquement à des fins de test.
implements ::Release, fonction
Décrémente le nombre de références pour l’interface par défaut de l’objet implémente .
Syntaxe
unsigned long __stdcall Release() noexcept;
Valeur de retour
Nouveau nombre de références. Cette valeur est destinée à être utilisée uniquement à des fins de test.
implements ::operator Windows ::Foundation ::IInspectable
Convertit l’objet implémente en Windows ::Foundation ::IInspectable. Cet opérateur vous permet de passer l’objet implements à une fonction qui attend un IInspectable.
Syntaxe
operator winrt::Windows::Foundation::IInspectable() const noexcept;
Valeur de retour
Implémente l’objet converti en windows ::Foundation ::IInspectable.