次の方法で共有


古い MAPIOBJECT で IMAPIProp::GetProps を呼び出すと Outlook がクラッシュする

元の KB 番号: 4131515

現象

次のような状況で問題が発生します。

  • Microsoft Outlook を使用して電子メール メッセージを作成します。
  • 既存のメール メッセージを新しいメッセージに添付します。
  • 添付されたメッセージを開いて表示します。
  • NewInspector イベントを使用して、開いたメールの添付ファイルに対応する現在の Outlook.MailItem への参照を取得します。
  • MailItem オブジェクトから、基になる MAPI オブジェクトへの参照を取得するには、C++ で MAPIOBJECT プロパティを読み取ります。
  • メッセージを保存するか、Outlook によって自動保存操作が開始されます。
  • NewInspector イベントで取得した参照からMAPIOBJECT、IMAPIProp 参照で GetProps メソッドを開始します。

このシナリオでは、Outlook がクラッシュします。

原因

プロパティから MAPIOBJECT 取得した MAPI オブジェクトは古くなり、使用できなくなります。 対応する Outlook アイテムが変更された場合は、 プロパティを再利用しないでください。

解決方法

Outlook または Outlook オブジェクト モデル項目にマップする MAPI オブジェクトに対して操作を実行する必要があるたびに、基になる MAPI オブジェクトへの新しい参照を取得する必要があります。 次に、無効になった古い参照ではなく、その新しい参照に対して MAPI 操作を実行します。 古い参照を使用すると、予期しない動作が発生し、Outlook クライアントがクラッシュする可能性があります。

詳細

Outlook オブジェクト モデルを介して取得した参照を、必要以上に長く保持 MAPIOBJECT しないことをお勧めします。 これは、基になるオブジェクトが頻繁に変更される可能性があるためです。 古い基になるオブジェクトを使用すると、予期しないエラーが発生する可能性があります。 これは、「現象」セクションで説明されているシナリオだけでなく、Outlook オブジェクト モデルを介して参照を取得 MAPIOBJECT する必要がある可能性があるすべてのシナリオに適用されます。