IMAPISupport::MakeInvalid
适用于:Outlook 2013 | Outlook 2016
将对象标记为不可用。
HRESULT MakeInvalid(
ULONG ulFlags,
LPVOID lpObject,
ULONG ulRefCount,
ULONG cMethods
);
参数
ulFlags
保留;必须为零。
lpObject
[in]指向要失效的 对象的指针。 对象的 接口必须派生自 IUnknown。
ulRefCount
[in]对象的当前引用计数。
cMethods
[in]对象的 vtable 中方法的计数。
返回值
S_OK
对象已成功标记为不可用。
备注
为所有支持对象实现 IMAPISupport::MakeInvalid 方法。 要失效的对象必须派生自 IUnknown 接口或派生自 IUnknown 的接口。
MakeInvalid 通过将对象的 vtable 替换为大小相似的存根 vtable,将对象标记为不可用, IUnknown::AddRef 和 IUnknown::Release 方法按预期执行。 但是,任何其他方法都失败,MAPI_E_INVALID_OBJECT返回值。
给调用方的说明
服务提供商和消息服务通常在关闭时调用 MakeInvalid 。 但是,可以随时调用 MakeInvalid 。 例如,如果客户端释放对象而不释放其某些子对象,则可以立即调用 MakeInvalid 来释放这些子对象。
必须拥有尝试使该对象失效的对象。 它的长度必须至少为 16 个字节,并且其 vtable 中至少有三种方法。
可以调用 MakeInvalid ,然后执行任何关闭工作,例如放弃关联的数据结构,这通常是在释放对象期间完成的。 支持对象的代码无需保留在内存中,因为 MAPI 通过调用 MAPIFreeBuffer 释放内存,然后释放对象。 可以释放资源,调用 MakeInvalid,然后忽略无效的对象。