winrt::Windows::Foundation::IUnknown struct (C++/WinRT)
每个 C++/WinRT 运行时类 (Windows 或第三方运行时类) 派生自 winrt::Windows::Foundation::IUnknown。 它表示 COM IUnknown 接口,并提供查询不同接口、abi 函数和比较运算符等功能。
语法
struct IUnknown
要求
支持的最低 SDK:Windows SDK版本 10.0.17134.0 (Windows 10,版本 1803)
命名空间: winrt
标头: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (默认包含)
构造函数
构造函数 | 说明 |
---|---|
IUnknown::IUnknown 构造函数 | 初始化 IUnknown 结构的新实例,可以选择使用输入数据的副本或移动。 |
成员函数
函数 | 说明 |
---|---|
IUnknown::as 函数 | 如果支持,则返回请求的接口。 如果不是,则引发 。 |
IUnknown::try_as 函数 | 如果支持,则返回请求的接口。 null 如果不是 ,则返回 或 false 。 |
成员运算符
运算符 | 说明 |
---|---|
IUnknown::operator bool | 检查 IUnknown 对象是否引用接口。 |
IUnknown::operator= (赋值运算符) | 为 IUnknown 对象赋值。 |
免费函数
函数 | 说明 |
---|---|
attach_abi 函数 | 将 IUnknown 对象附加到拥有对其目标的引用的原始指针;不会添加其他引用。 |
copy_from_abi 函数 | 从另一个指针复制到 IUnknown 对象。 递减当前引用的任何接口或对象的引用计数,复制原始指针参数,并开始管理接口或对象指向的生存期。 |
copy_to_abi 函数 | 从 IUnknown 对象复制到另一个指针。 递增当前引用的任何接口或对象的引用计数,并将该接口或对象的内存地址复制到 参数中。 |
detach_abi 函数 | 从原始 IUnknown 接口 分离,而不递减引用计数,也许可以将其返回到调用方。 |
get_abi函数 | 如果需要将基础原始 IUnknown 接口 指针传递给函数,则返回该指针。 |
get_unknown 函数 | 一个帮助程序函数,返回投影类型的对象的基础原始 IUnknown 接口 的地址。 |
put_abi 函数 | 返回基础原始 IUnknown 接口 指针的地址,作为指向 void 的指针的指针;此函数可帮助调用方法 (例如 COM 方法) ,这些方法通过指向 void 的指针将引用作为 out 参数返回。 |
swap 函数 | 交换两个 IUnknown 参数的内容,以便它们指向彼此的目标。 |
免费运算符
函数 | 说明 |
---|---|
operator!= (不相等运算符) | 返回一个值,该值指示两个参数是否引用不同的目标。 |
运算符< (小于运算符) | 返回一个值,该值指示第一个参数的目标是否早于第二个参数的目标出现在内存中。 |
operator<= (小于或等于运算符) | 返回一个值,该值指示第一个参数的目标出现在内存中是否早于或与第二个参数的目标位于同一位置。 |
operator== (相等运算符) | 返回一个值,该值指示两个参数是否引用相同的接口和/或对象。 |
运算符> (大于运算符) | 返回一个值,该值指示第一个参数的目标是否晚于第二个参数的目标出现在内存中。 |
operator>= (大于或等于运算符) | 返回一个值,该值指示第一个参数的目标出现在内存中是否晚于第二个参数的目标所在的同一位置。 |
IUnknown::IUnknown 构造函数
初始化 IUnknown 结构的新实例,可以选择使用输入数据的副本或移动。
语法
IUnknown() noexcept;
IUnknown(std::nullptr_t) noexcept;
IUnknown(winrt::Windows::Foundation::IUnknown const& other) noexcept;
IUnknown(winrt::Windows::Foundation::IUnknown&& other) noexcept;
参数
other
另一个 初始化 IUnknown 对象的 IUnknown 。
IUnknown::as 函数
如果支持,则返回请求的接口。 如果不是,则引发 。 如果要查询不需要传递回调用方接口,则此函数非常有用。
语法
template <typename To> auto as() const;
template <typename To> void as(To& to) const;
模板参数
typename To
请求的接口的类型。
参数
to
对值以接收请求的接口的引用。
返回值
引用所请求接口 的com_ptr ,或由 C++/WinRT 或第三方) 声明 (请求接口的强类型智能指针。
IUnknown::try_as 函数
如果支持,则返回请求的接口。 null
(auto
返回重载) 返回,或者 false
(bool
返回重载) (如果不是)。 如果要查询不需要传递回调用方接口,则此函数非常有用。
语法
template <typename To> auto try_as() const noexcept;
template <typename To> bool try_as(To& to) const noexcept;
模板参数
typename To
请求的接口的类型。
参数
to
对值以接收请求的接口的引用。 可以是空引用。
返回值
引用所请求接口 的com_ptr ,或由 C++/WinRT 或第三方 () 声明的接口的强类型智能指针(如果支持所请求的接口),否则 null
(auto
返回重载) 或 false
(bool
返回重载) 。
如果 to
为空引用,则 null
返回 或 false
。
IUnknown::operator bool
检查 IUnknown 对象是否引用接口。 如果 IUnknown 对象未引用接口,则它在逻辑上为 null;否则,它在逻辑上不为 null。
语法
explicit operator bool() const noexcept;
返回值
true
如果 IUnknown 对象引用接口 (逻辑上不为 null) ,则 false
(逻辑上为 null) 。
IUnknown::operator= (赋值运算符)
为 IUnknown 对象赋值。
语法
winrt::Windows::Foundation::IUnknown& operator=(winrt::Windows::Foundation::IUnknown const& other) noexcept;
winrt::Windows::Foundation::IUnknown& operator=(winrt::Windows::Foundation::IUnknown&& other) noexcept;
winrt::Windows::Foundation::IUnknown& operator=(std::nullptr_t) noexcept;
参数
other
要通过复制或移动分配给 IUnknown 对象的 IUnknown 值。
返回值
对 IUnknown 对象的引用。
attach_abi 函数
将 IUnknown 对象附加到拥有对其目标的引用的原始指针;不会添加其他引用。 如果需要,可以使用此函数来合并引用。
语法
void attach_abi(winrt::Windows::Foundation::IUnknown& object, void* value) noexcept;
参数
object
要操作的 IUnknown 值。
value
拥有对其目标的引用的原始指针。
copy_from_abi 函数
从另一个指针复制到 IUnknown 对象。 递减当前引用的任何接口或对象的引用计数,复制原始指针参数,并开始管理接口或对象指向的生存期。
语法
void copy_from_abi(winrt::Windows::Foundation::IUnknown& object, void* value) noexcept;
参数
object
要操作的 IUnknown 值。
value
指向目标的原始指针,该目标的生存期应由 IUnknown 对象管理。
copy_to_abi 函数
从 IUnknown 对象复制到另一个指针。 递增当前引用的任何接口或对象的引用计数,并将该接口或对象的内存地址复制到 参数中。 此函数允许你分发对同一接口的引用,而无需调用 QueryInterface。
语法
void copy_to_abi(winrt::Windows::Foundation::IUnknown const& object, void*& value) noexcept;
参数
object
要操作的 IUnknown 值。
value
原始指针引用;通过它复制指向 IUnknown 对象的目标的指针。
detach_abi 函数
将 IUnknown 对象从其原始 IUnknown 接口 中分离,而不会递减引用计数,这也许可以将其返回到调用方。
语法
void* detach_abi(winrt::Windows::Foundation::IUnknown& object) noexcept;
void* detach_abi(winrt::Windows::Foundation::IUnknown&& object) noexcept;
参数
object
要操作的 IUnknown 值。
返回值
指向 由 IUnknown 对象引用的原始 IUnknown 接口的 指针。
get_abi函数
如果需要将基础原始 IUnknown 接口 指针传递给函数,则返回该指针。 可以在返回的指针上调用 AddRef、 Release 或 QueryInterface 。
语法
void* get_abi(winrt::Windows::Foundation::IUnknown const& object) noexcept;
参数
object
要操作的 IUnknown 值。
返回值
指向 由 IUnknown 对象引用的原始 IUnknown 接口的 指针。
operator!= (不相等运算符)
返回一个值,该值指示两个参数是否引用不同的目标。
语法
bool operator!=(winrt::Windows::Foundation::IUnknown const& left, winrt::Windows::Foundation::IUnknown const& right) noexcept;
参数
left
right
一个 IUnknown 值,其目标内存地址要与其他参数的内存地址进行比较。
返回值
true
如果两个参数指向不同的目标,则为 ;否则为 false
。
运算符< (小于运算符)
返回一个值,该值指示第一个参数的目标是否早于第二个参数的目标出现在内存中。
语法
bool operator<(winrt::Windows::Foundation::IUnknown const& left, winrt::Windows::Foundation::IUnknown const& right) noexcept;
参数
left
right
一个 IUnknown 值,其目标内存地址要与其他参数的内存地址进行比较。
返回值
true
如果第一个参数的目标内存地址小于第二个参数的内存地址,则为 ;否则为 false
。
operator<= (小于或等于运算符)
返回一个值,该值指示第一个参数的目标出现在内存中是否早于或与第二个参数的目标位于同一位置。
语法
bool operator<=(winrt::Windows::Foundation::IUnknown const& left, winrt::Windows::Foundation::IUnknown const& right) noexcept;
参数
left
right
一个 IUnknown 值,其目标内存地址要与其他参数的内存地址进行比较。
返回值
true
如果第一个参数的目标的内存地址小于或等于第二个参数的内存地址,则为 ;否则为 false
。
operator== (相等运算符)
返回一个值,该值指示两个参数是否引用相同的接口和/或对象。
语法
bool operator==(winrt::Windows::Foundation::IUnknown const& left, winrt::Windows::Foundation::IUnknown const& right) noexcept;
参数
left
right
一个 IUnknown 值,其目标内存地址要与其他参数的内存地址进行比较。
返回值
true
如果两个参数指向同一目标,则为 ;否则为 false
。
运算符> (大于运算符)
返回一个值,该值指示第一个参数的目标是否晚于第二个参数的目标出现在内存中。
语法
bool operator>(winrt::Windows::Foundation::IUnknown const& left, winrt::Windows::Foundation::IUnknown const& right) noexcept;
参数
left
right
一个 IUnknown 值,其目标内存地址要与其他参数的内存地址进行比较。
返回值
true
如果第一个参数的目标的内存地址大于第二个参数的内存地址,则为 ;否则 false
为 。
operator>= (大于或等于运算符)
返回一个值,该值指示第一个参数的目标出现在内存中是否晚于第二个参数的目标所在的同一位置。
语法
bool operator>=(winrt::Windows::Foundation::IUnknown const& left, winrt::Windows::Foundation::IUnknown const& right) noexcept;
参数
left
right
一个 IUnknown 值,其目标内存地址要与其他参数的内存地址进行比较。
返回值
true
如果第一个参数的目标的内存地址大于或等于第二个参数的内存地址,则为 ;否则为 false
。
put_abi 函数
返回基础原始 IUnknown 接口 指针的地址,作为指向 void 的指针的指针;此函数可帮助调用方法 (例如 COM 方法) ,这些方法通过指向 void 的指针将引用作为 out 参数返回。
语法
void** put_abi(winrt::Windows::Foundation::IUnknown& object) noexcept;
参数
object
要操作的 IUnknown 值。
返回值
基础原始 IUnknown 接口指针的 地址。
swap 函数
交换两个 IUnknown 参数的内容,以便它们指向彼此的目标。
语法
void swap(winrt::Windows::Foundation::IUnknown& left, winrt::Windows::Foundation::IUnknown& right) noexcept;
参数
left
right
一个 IUnknown 值,其指针与另一个参数的指针相互交换。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈