winrt::implements 结构模板 (C++/WinRT)

这是你自己的 C++/WinRT 实现 (运行时类和激活工厂) 直接或间接派生的基础。 它实现一个或多个Windows 运行时接口 (你将其指定为) 的类型参数,它还提供 IUnknownIInspectableIAgileObjectIWeakReferenceSource 等的有效实现。

注意

有关从此类型派生的详细信息和示例,请参阅 使用 C++/WinRT 创作 API

winrt::implements 上的扩展点

winrt::implements 具有扩展点,使你能够延迟销毁实现类型、在销毁期间安全查询,以及将入口挂钩到投影的方法和从投影的方法中退出。 下面是扩展点的名称,以及指向详细信息和代码示例的链接。

标记类型

实现结构模板支持多种用于替代默认行为的标记类型。 我们预计,这些将很少使用:默认值足以满足几乎所有情况。 标记类型可以出现在接口列表中的任意位置,即可变参数包。

实现支持以下标记类型:

第一个示例适用于直接从 implements 派生时。

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

下一个示例适用于在创作运行时类时使用。

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

语法

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

模板参数

typename D 派生的类型名称。

typename... I 要实现的任意数量的接口,以及任何所需的标记类型。

默认情况下,从 IInspectable 派生的接口由 IInspectable::GetIids 方法的实现报告。 使用 cloaked 标记模板 可禁止显示该模板。

示例

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

要求

支持的最低 SDK:Windows SDK 版本 10.0.17134.0 (Windows 10,版本 1803)

命名空间: winrt

标头: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (默认包含)

成员函数

函数 说明
implements::AddRef 函数 递增 实现 对象的默认接口的引用计数。
implements::find_inspectable 函数 TBD
implements::find_interface 函数 指向由 implements 对象实现的接口的指针,由指定的标识符标识;不调用 AddRef
implements::get_local_iids 函数 检索包含 由 implements 对象实现的接口标识符的双元素元组。
implements::get_strong 函数 检索对 implements 对象的 指针的强引用。
implements::get_weak 函数 检索对 implements 对象的 指针的弱引用。
implements::QueryInterface 函数 检索指向由指定的标识符标识的 implements 对象实现的接口的指针;调用 AddRef
implements::Release 函数 递减 实现 对象的默认接口的引用计数。

成员运算符

运算符 说明
implements::operator Windows::Foundation::IInspectable implements 对象转换为 Windows::Foundation::IInspectable

数据成员

数据成员 说明
m_inner 访问 组合 对象(如果适用)。 有关详细信息,请参阅 运行时类派生

implements::AddRef 函数

递增 实现 对象的默认接口的引用计数。

语法

unsigned long __stdcall AddRef() noexcept;

返回值

新的引用计数。 此值仅用于测试目的。

implements::find_inspectable 函数

检索指向由 implements 对象实现的 IInspectable 接口的指针。 不对它返回的指针调用 AddRef 。 此函数允许您将 implements 对象传递给需要 IInspectable 的函数。

语法

::IInspectable* find_inspectable() const noexcept override;

返回值

指向由 implements 对象实现的 IInspectable 接口的指针。

implements::find_interface 函数

检索指向由指定标识符标识的 implements 对象实现的接口的指针。 不对它返回的指针调用 AddRef

语法

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

返回值

指向由 implements 对象实现的接口的指针,由指定的标识符标识。

implements::get_local_iids 函数

检索包含 由 implements 对象实现的接口标识符的双元素元组。 不包括“Cloaked”接口

语法

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

返回值

一个双元素元组,其中包含由 implements 对象实现的接口的数量和标识符。

implements::get_strong 函数

检索对 winrt::implements 对象的 指针的强引用。 请参阅 C++/WinRT 中的强引用和弱引用。 由于 get_strongwinrt::implements 结构模板的成员函数,因此只能从直接或间接派生自 winrt::implements 的对象(如 C++/WinRT 对象)调用它。 有关派生自 winrt::implements 的详细信息和示例,请参阅使用 C++/WinRT 创作 API

语法

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

返回值

实现 对象的指针的强引用。

implements::get_weak 函数

检索对 winrt::implements 对象的 指针的弱引用。 请参阅 C++/WinRT 中的强引用和弱引用。 由于 get_weakwinrt::implements 结构模板的成员函数,因此只能从直接或间接派生自 winrt::implements 的对象(如 C++/WinRT 对象)调用它。 有关派生自 winrt::implements 的详细信息和示例,请参阅使用 C++/WinRT 创作 API

语法

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

返回值

一个 weak_ref 对象,该对象表示对 实现 对象的指针的弱引用。

implements::QueryInterface 函数

检索指向由指定标识符标识的 implements 对象实现的接口的指针。 对它返回的指针调用 AddRef

语法

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

返回值

新的引用计数。 此值仅用于测试目的。

implements::Release 函数

递减 实现 对象的默认接口的引用计数。

语法

unsigned long __stdcall Release() noexcept;

返回值

新的引用计数。 此值仅用于测试目的。

implements::operator Windows::Foundation::IInspectable

implements 对象转换为 Windows::Foundation::IInspectable。 此运算符允许您将 implements 对象传递给需要 IInspectable 的函数。

语法

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

返回值

实现转换为 Windows::Foundation::IInspectable 的对象。

另请参阅