부실 MAPIOBJECT에서 IMAPIProp::GetProps를 호출하면 Outlook이 충돌합니다.

원래 KB 번호: 4131515

증상

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

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

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

원인

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

해결 방법

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

추가 정보

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