오래 된 MAPIOBJECT에서 IMAPIProp:: GetProps을 호출 하면 Outlook이 충돌 함

원래 수 (kbps):   4131515

증상

다음과 같은 경우를 생각해볼 수 있습니다.

  • Microsoft Outlook을 사용 하 여 전자 메일 메시지를 만듭니다.
  • 기존 전자 메일 메시지를 새 메시지에 첨부 합니다.
  • 연결 된 메시지를 열어 볼 수 있습니다.
  • NewInspector 이벤트 를 사용 하 여 방금 연 전자 메일 첨부 파일에 해당 하는 현재 Outlook MailItem 에 대 한 참조를 가져올 수 있습니다.
  • MailItem 개체를 사용 하 여 기본 MAPI 개체에 대 한 참조를 가져올 수 있습니다 MAPIOBJECT .
  • 메시지를 저장 하거나 Outlook이 자동 저장 작업을 시작 합니다.
  • NewInspector 이벤트를 통해 얻은 참조에서 Imapiprop 참조에 대해 getprops 메서드를 시작 합니다 MAPIOBJECT .

이 시나리오에서는 Outlook이 충돌 합니다.

원인

속성에서 받은 MAPI 개체가 MAPIOBJECT 부실 해지고 더 이상 사용할 수 없습니다. 해당 Outlook 항목이 변경 된 경우에는이 속성을 다시 사용 하면 안 됩니다.

해결 방법

Outlook 또는 Outlook 개체 모델 항목에 매핑되는 MAPI 개체에서 작업을 실행 해야 할 때마다 기본 MAPI 개체에 대 한 새 참조를 가져와야 합니다. 그런 다음 더 이상 유효 하지 않을 수 있는 부실 참조가 아닌 새 참조에 대해 모든 MAPI 작업을 실행 합니다. 오래 된 참조를 사용 하면 예기치 않은 동작이 발생 하 고 Outlook 클라이언트의 작동이 중단 될 수 있습니다.

추가 정보

MAPIOBJECT필요한 경우 Outlook 개체 모델을 통해 얻은 참조를 유지 하지 않는 것이 좋습니다. 이는 원본으로 사용 하는 개체가 변경 될 수 있기 때문입니다. 오래 된 원본 개체를 사용 하면 예기치 않은 오류가 발생할 수 있습니다. 이는 MAPIOBJECT "현상" 섹션에 나와 있는 시나리오 뿐 아니라 Outlook 개체 모델을 통해 참조를 가져올 수 있는 모든 시나리오에 적용 됩니다.