Outlook kraschar när du anropar 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 till det nya meddelandet.
  • Du öppnar det bifogade meddelandet för visning.
  • Du använder händelsen NewInspector för att hämta en referens till den aktuella Outlook.MailItem som motsvarar den e-postbilaga som du precis öppnade.
  • Från MailItem-objektet får du en referens till det underliggande MAPI-objektet genom att läsa MAPIOBJECT-egenskapen i C++.
  • Du sparar meddelandet eller så initierar Outlook en autosparningsåtgärd.
  • Du startar metoden GetProps på en IMAPIProp-referens från referensen MAPIOBJECT som du fick via NewInspector-händelsen.

I det här scenariot kraschar Outlook.

Orsak

MAPI-objektet som du hämtade 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.

Åtgärd

Varje gång du måste köra en åtgärd på MAPI-objektet som mappar till ett Outlook- eller Outlook-objektmodellobjekt bör du få en ny referens till det underliggande MAPI-objektet. Kör sedan alla MAPI-åtgärder på 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 fast vid referenser MAPIOBJECT som du har fått via Outlook-objektmodellen längre än nödvändigt. 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. Detta gäller för alla scenarier där du kan behöva hämta en MAPIOBJECT referens via Outlook-objektmodellen, inte bara det scenario som nämns i avsnittet "Symptom".