Outlook kraschar när du ringer IMAPIProp::GetProps på en inaktuell MAPIOBJECT

Ursprungligt KB-nummer:   4131515

Symptom

Tänk dig följande situation:

  • Du skapar ett e-postmeddelande med hjälp av Microsoft Outlook.
  • Du bifogar ett befintligt e-postmeddelande i det nya meddelandet.
  • Du öppnar det bifogade meddelandet för visning.
  • Du använder händelsen NewInspector för att få en referens till det aktuella Outlook.MailItem som motsvarar den bifogade fil för e-post som du precis öppnade.
  • Från MailItem-objektet får du en referens till det underliggande MAPI-objektet genom att läsa egenskapen MAPIOBJECT i C++.
  • Du sparar meddelandet eller Outlook startar en spara automatiskt-åtgärd.
  • Du startar metoden GetProps på en IMAPIProp-referens från referensen som du erhöll MAPIOBJECT via NewInspector-händelsen.

I det här scenariot kraschar Outlook.

Orsak

MAPI-objektet som du fick från MAPIOBJECT egenskapen har blivit inaktuellt och kan inte längre användas. Du bör inte återanvända egenskapen om motsvarande Outlook-objekt har ändrats.

Lösning

Varje gång du måste köra en åtgärd på MAPI-objektet som mappar till ett objekt i en Outlook- eller Outlook-objektmodell bör du få en ny referens till det underliggande MAPI-objektet. Kör sedan MAPI-åtgärder för den nya referensen i stället för på en inaktuell referens som kanske inte längre är giltig. Om du använder en inaktuell referens kan det orsaka oväntat beteende och krascha Outlook-klienten.

Mer information

Vi rekommenderar att du inte håller kvar på referenser MAPIOBJECT som du fått via Outlook-objektmodellen under längre tid än vad som behövs. Det beror på att det underliggande objektet ofta kan komma att ändras. Om du använder ett inaktuellt underliggande objekt kan det orsaka oväntade fel. Det här gäller alla scenarier där du kan behöva få en referens via Outlook-objektmodellen, inte bara det scenario som nämns i MAPIOBJECT avsnittet "Symptom".