winrt::Windows::Foundation::IUnknown 结构(C++/WinRT)
每个 C++/WinRT 运行时类(无论是 Windows 还是第三方运行时类)都派生自 winrt::Windows::Foundation::IUnknown。 它表示 COM IUnknown 接口,并提供查询不同接口、abi 函数和比较运算符等设施。
语法
struct IUnknown
要求
受支持的最低 SDK: Windows SDK 版本 10.0.17134.0 (Windows 10 版本 1803)
Namespace: 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的指针的指针;此函数可帮助你调用通过指向 void指针的指针返回作为 out 参数的引用的方法(如 COM 方法)。 |
交换函数 | 交换两个 IUnknown 参数的内容,以便它们指向彼此的目标。 |
免费运算符
功能 | 描述 |
---|---|
运算符!= (不等运算符) | 返回一个值,该值指示这两个参数是否引用不同的目标。 |
运算符<(小于运算符) | 返回一个值,该值指示第一个参数的目标是否早于内存中的第二个参数的目标。 |
运算符<= | 返回一个值,该值指示第一个参数的目标是在内存中早于第二个参数的目标,还是在与第二个参数相同的位置发生。 |
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
-returning overload)或 false
(bool
-returning overload)。 如果要查询不需要传回调用方接口,则此函数非常有用。
语法
template <typename To> auto try_as() const noexcept;
template <typename To> bool try_as(To& to) const noexcept;
模板参数
typename To
所请求接口的类型。
参数
to
对要接收请求接口的值的引用。 可以是 null 引用。
返回值
引用请求的接口的 com_ptr,或请求接口的强类型智能指针(由 C++/WinRT 或第三方声明),如果支持请求的接口,则 null
(auto
-returning overload)或 false
(bool
-returning overload)。
如果 to
为 null 引用,则返回 null
或 false
。
IUnknown::operator bool
检查 IUnknown 对象是否引用接口。 如果 IUnknown 对象未引用接口,则其逻辑为 null;否则,逻辑上不为 null。
语法
explicit operator bool() const noexcept;
返回值
如果 IUnknown 对象引用接口(逻辑上不为 null),则 true
否则 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 值。
返回值
指向
get_abi函数
如果需要将其传递给函数,则返回基础原始 IUnknown 接口 指针。 可以在返回的指针上调用 AddRef、Release或 QueryInterface。
语法
void* get_abi(winrt::Windows::Foundation::IUnknown const& object) noexcept;
参数
object
要运行的 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
。
运算符<= (小于或等于运算符)
返回一个值,该值指示第一个参数的目标是在内存中早于第二个参数的目标,还是在与第二个参数相同的位置发生。
语法
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
。
运算符>= (大于或等于运算符)
返回一个值,该值指示第一个参数的目标在内存中是晚于第二个参数的目标,还是在与第二个参数相同的位置发生。
语法
bool operator>=(winrt::Windows::Foundation::IUnknown const& left, winrt::Windows::Foundation::IUnknown const& right) noexcept;
参数
left
right
一个 IUnknown 值,其目标内存地址与其他参数的内存地址进行比较。
返回值
如果第一个参数的目标内存地址大于或等于第二个参数的内存地址,则 true
否则 false
。
put_abi 函数
返回基础原始 IUnknown 接口的地址, 指针作为指向 void的指针的指针;此函数可帮助你调用通过指向 void指针的指针返回作为 out 参数的引用的方法(如 COM 方法)。
语法
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 值的指针,该值指向与其他参数的相互交换。