winrt::implements 结构模板 (C++/WinRT)
这是你自己的 C++/WinRT 实现 (运行时类和激活工厂) 直接或间接派生的基础。 它实现一个或多个Windows 运行时接口 (你将其指定为) 的类型参数,它还提供 IUnknown、IInspectable、IAgileObject、IWeakReferenceSource 等的有效实现。
注意
有关从此类型派生的详细信息和示例,请参阅 使用 C++/WinRT 创作 API。
winrt::implements 上的扩展点
winrt::implements 具有扩展点,使你能够延迟销毁实现类型、在销毁期间安全查询,以及将入口挂钩到投影的方法和从投影的方法中退出。 下面是扩展点的名称,以及指向详细信息和代码示例的链接。
标记类型
实现结构模板支持多种用于替代默认行为的标记类型。 我们预计,这些将很少使用:默认值足以满足几乎所有情况。 标记类型可以出现在接口列表中的任意位置,即可变参数包。
实现支持以下标记类型:
- 掩体 I<>
- composable
- 编写
- non_agile
- no_weak_ref
- no_module_lock
- 工厂) 的static_lifetime (
第一个示例适用于直接从 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_strong 是 winrt::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_weak 是 winrt::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 的对象。