Plantilla de estructura winrt::implements (C++/WinRT)

Esta es la base de la que derivan sus propias implementaciones de C++/WinRT (de clases en tiempo de ejecución y generadores de activación) directa o indirectamente. Implementa una o varias interfaces de Windows Runtime (que se especifican como parámetros de tipo) y también proporciona implementaciones eficaces de IUnknown, IInspectable, IAgileObject, IWeakReferenceSource y otras.

Nota

Para obtener más información sobre cómo derivar de este tipo y ejemplos, consulta Creación de API con C++/WinRT.

Puntos de extensión en winrt::implements

winrt::implements tiene puntos de extensión que permiten aplazar la destrucción de los tipos de implementación, consultar de forma segura durante la destrucción y enlazar la entrada y salir de los métodos proyectados. Estos son los nombres de los puntos de extensión, junto con vínculos a detalles y ejemplos de código.

Tipos de marcador

La plantilla de estructura implementa admite varios tipos de marcador que se usan para invalidar el comportamiento predeterminado. Esperamos que solo se usen rara vez; los valores predeterminados son suficientes para casi todos los casos. Un tipo de marcador puede aparecer en cualquier parte de la lista de interfaz, que es el paquete de parámetros variádicos.

Los siguientes tipos de marcador son compatibles con implementaciones:

Este primer ejemplo se aplica cuando se deriva directamente de implementaciones.

struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
    ...
}

Este ejemplo siguiente es para cuando se crea una clase en tiempo de ejecución.

struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
    ...
}

Sintaxis

template <typename D, typename... I>
struct implements

Parámetros de plantilla

typename D Nombre del tipo derivado.

typename... I Cualquier número de interfaces que se van a implementar, además de cualquier tipo de marcador deseado.

De forma predeterminada, las interfaces que derivan de IInspectable se notifican mediante la implementación del método IInspectable::GetIids . Use la plantilla decloaked marcador para suprimirla.

Ejemplo

// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
    IFrameworkView CreateView()
    {
        return ...
    }
}
...

Requisitos

SDK mínimo admitido: Windows SDK, versión 10.0.17134.0 (Windows 10, versión 1803)

Espacio de nombres: winrt

Encabezado: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (incluido de forma predeterminada)

Funciones miembro

Función Descripción
implements::AddRef (función) Incrementa el recuento de referencias de la interfaz predeterminada del objeto implements .
implements::find_inspectable función TBD
implements::find_interface función Puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado; no llama a AddRef.
implements::get_local_iids función Recupera una tupla de dos elementos que contiene los identificadores de las interfaces implementadas por el objeto implements .
implements::get_strong función Recupera una referencia segura al puntero de este objeto de implementación.
Función winrt::implements::get_weak Recupera una referencia débil al puntero de este objeto de implementación.
implements::QueryInterface (Función) Recupera el puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado; llama a AddRef.
implements::Release (Función) Disminuye el recuento de referencias para la interfaz predeterminada del objeto implements .

Operadores de miembro

Operador Descripción
implements::operator Windows::Foundation::IInspectable Convierte el objeto implements en un objeto Windows::Foundation::IInspectable.

Miembros de datos

Miembro de datos Descripción
m_inner Obtiene acceso al objeto compuesto , si procede. Para obtener más información, consulte Derivación de clases en tiempo de ejecución.

implements::AddRef (función)

Incrementa el recuento de referencias de la interfaz predeterminada del objeto implements .

Sintaxis

unsigned long __stdcall AddRef() noexcept;

Valor devuelto

Nuevo recuento de referencias. Este valor está pensado para usarse únicamente con fines de prueba.

implements::find_inspectable función

Recupera el puntero a la interfaz IInspectable implementada por el objeto implements . No llama a AddRef en el puntero que devuelve. Esta función permite pasar el objeto implements a una función que espera una instancia de IInspectable.

Sintaxis

::IInspectable* find_inspectable() const noexcept override;

Valor devuelto

Puntero a la interfaz IInspectable implementada por el objeto implements .

implements::find_interface función

Recupera el puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado. No llama a AddRef en el puntero que devuelve.

Sintaxis

void* find_interface(winrt::guid const& id) const noexcept override;

Valor devuelto

Puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado.

implements::get_local_iids función

Recupera una tupla de dos elementos que contiene los identificadores de las interfaces implementadas por el objeto implements . Las interfaces "ocultas" no se incluyen.

Sintaxis

std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;

Valor devuelto

Una tupla de dos elementos que contiene el número e identificadores de las interfaces implementadas por el objeto implements .

implements::get_strong función

Recupera una referencia segura al puntero winrt::implementsdel objeto . Consulta el artículo Referencias fuertes y débiles de C++/WinRT. Dado que get_strong es una función miembro de la plantilla de estructura winrt::implements , solo se puede llamar desde un objeto que deriva directa o indirectamente de winrt::implements, como un objeto de C++/WinRT. Para más información acerca de cómo derivar desde winrt::implements y ver ejemplos, consulta Crear API con C++/WinRT.

Sintaxis

protected:
    winrt::com_ptr<D> get_strong() noexcept;

Valor devuelto

Una referencia segura al puntero de este objeto implementa.

Función winrt::implements::get_weak

Recupera una referencia débil al puntero winrt::implements del objeto . Consulta el artículo Referencias fuertes y débiles de C++/WinRT. Dado que get_weak es una función miembro de la plantilla de estructura winrt::implements , solo se puede llamar desde un objeto que deriva directa o indirectamente de winrt::implements, como un objeto de C++/WinRT. Para más información acerca de cómo derivar desde winrt::implements y ver ejemplos, consulta Crear API con C++/WinRT.

Sintaxis

protected:
    winrt::weak_ref<D> get_weak() noexcept;

Valor devuelto

Objeto weak_ref que representa una referencia débil al puntero de este objeto implementa.

implements::QueryInterface (Función)

Recupera el puntero a la interfaz implementada por el objeto implements , identificado por el identificador especificado. Llama a AddRef en el puntero que devuelve.

Sintaxis

HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;

Valor devuelto

Nuevo recuento de referencias. Este valor está pensado para usarse únicamente con fines de prueba.

implements::Release (Función)

Disminuye el recuento de referencias de la interfaz predeterminada del objeto implements .

Sintaxis

unsigned long __stdcall Release() noexcept;

Valor devuelto

Nuevo recuento de referencias. Este valor está pensado para usarse únicamente con fines de prueba.

implements::operator Windows::Foundation::IInspectable

Convierte el objeto implements en un objeto Windows::Foundation::IInspectable. Este operador permite pasar el objeto implements a una función que espera una IInspectable.

Sintaxis

operator winrt::Windows::Foundation::IInspectable() const noexcept;

Valor devuelto

El objeto implementa convertido en windows ::Foundation::IInspectable.

Consulte también