在过时的 MAPIOBJECT 上调用 IMAPIProp::GetProps 时,Outlook 崩溃

原始 KB 编号:   4131515

症状

请考虑以下情况:

  • 使用 Microsoft Outlook 创建电子邮件。
  • 将现有电子邮件附加到新邮件。
  • 打开附加的邮件进行查看。
  • 使用 NewInspector 事件 可获取对与刚打开的电子邮件附件相对应的当前 Outlook.MailItem 的引用。
  • MailItem 对象中,通过读取 C++ 中的 MAPIOBJECT 属性获取对基础 MAPI 对象的引用。
  • 保存邮件或 Outlook 启动自动保存操作。
  • 从通过 NewInspector 事件获取的引用对 IMAPIProp 引用启动 GetProps MAPIOBJECT 方法。

在这种情况下,Outlook 崩溃。

原因

从 属性获取的 MAPI MAPIOBJECT 对象已过时且不再可用。 如果相应的 Outlook 项目已更改,您不应重复使用该属性。

解决方案

每次您必须对映射到 Outlook 或 Outlook 对象模型项的 MAPI 对象运行操作时,都应获取对基础 MAPI 对象的新引用。 然后,对新引用(而不是可能不再有效的过时引用)运行任何 MAPI 操作。 使用过时的引用可能会导致意外行为并崩溃 Outlook 客户端。

更多信息

建议您不要将通过 Outlook 对象模型获取的任何引用保留超过 MAPIOBJECT 所需时间。 这是因为基础对象经常会发生变化。 使用过时的基础对象可能会导致意外错误。 这适用于可能必须通过 Outlook 对象模型获取引用的所有方案,而不仅是"症状"部分中提到的 MAPIOBJECT 方案。