实现 IUnknown 接口
适用于:Outlook 2013 | Outlook 2016
在每个 MAPI 对象中实现的 IUnknown 接口的方法支持对象间通信和对象管理。
IUnknown 有三种方法: IUnknown::AddRef、 IUnknown::QueryInterface 和 IUnknown::Release。 QueryInterface 使一个对象能够确定另一个对象是否支持特定接口。 使用 QueryInterface,两个事先不知道彼此功能的对象可以交互。 如果实现 QueryInterface 的对象确实支持有问题的接口,则它将返回指向接口实现的指针。 如果 对象不支持请求的接口,则返回MAPI_E_INTERFACE_NOT_SUPPORTED值。
当 QueryInterface 返回请求的接口指针时,它还必须增加新对象的引用计数。 对象的引用计数是用于管理对象的生命周期的数值。 当引用计数大于 1 时,无法释放对象的内存,因为该内存正被主动使用。 仅当引用计数下降到 0 时,才能安全释放对象。
其他两个 IUnknown 方法 AddRef 和 Release 管理引用计数。 AddRef 递增引用计数,而 Release 递减引用计数。 所有返回接口指针的方法或 API 函数(如 QueryInterface)都必须调用 AddRef 才能增加引用计数。 接收接口指针的方法的所有实现都必须调用 Release ,以在不再需要指针时递减计数。 释放 检查现有引用计数,仅当计数为 0 时才释放与接口关联的内存。
注意
由于 AddRef 和 Release 不需要返回准确的值,因此这些方法的调用方不得使用返回值来确定对象是否仍然有效或已被销毁。