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 函数 如果支持请求的接口,则返回请求的接口。 如果不是,则返回 nullfalse

成员运算符

算子 描述
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 函数

如果支持请求的接口,则返回请求的接口。 如果不是,则返回 nullauto-returning overload)或 falsebool-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 或第三方声明),如果支持请求的接口,则 nullauto-returning overload)或 falsebool-returning overload)。

如果 to 为 null 引用,则返回 nullfalse

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 值。

返回值

指向 IUnknown 对象引用的原始 IUnknown 接口的指针。

get_abi函数

如果需要将其传递给函数,则返回基础原始 IUnknown 接口 指针。 可以在返回的指针上调用 AddRefReleaseQueryInterface

语法

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

运算符<= (小于或等于运算符)

返回一个值,该值指示第一个参数的目标是在内存中早于第二个参数的目标,还是在与第二个参数相同的位置发生。

语法

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 值的指针,该值指向与其他参数的相互交换。

另请参阅