Outlook krasjer når du kaller IMAPIProp::GetProps på en foreldet MAPIOBJECT

Opprinnelig KB-nummer: 4131515

Symptomer

Vurder følgende scenario:

  • Du oppretter en e-postmelding ved hjelp av Microsoft Outlook.
  • Du legger ved en eksisterende e-postmelding i den nye meldingen.
  • Du åpner den vedlagte meldingen for visning.
  • Du bruker NewInspector-hendelsen til å få en referanse til gjeldende Outlook.MailItem som tilsvarer e-postvedlegget du nettopp åpnet.
  • Fra MailItem-objektet får du en referanse til det underliggende MAPI-objektet ved å lese MAPIOBJECT-egenskapen i C++.
  • Du lagrer meldingen, eller Outlook starter en automatisk lagringsoperasjon.
  • Du starter GetProps-metoden på en IMAPIProp-referanse fra MAPIOBJECT referansen du fikk via NewInspector-hendelsen.

I dette scenarioet krasjer Outlook.

Årsak

MAPI-objektet du hentet fra MAPIOBJECT egenskapen, er foreldet og kan ikke lenger brukes. Du bør ikke bruke egenskapen på nytt hvis det tilsvarende Outlook-elementet er endret.

Løsning

Hver gang du må kjøre en operasjon på MAPI-objektet som tilordnes til et Outlook- eller Outlook Object Model-element, skal du få en ny referanse til det underliggende MAPI-objektet. Kjør deretter eventuelle MAPI-operasjoner på den nye referansen i stedet for på en foreldet referanse som kanskje ikke lenger er gyldig. Bruk av en foreldet referanse kan føre til uventet virkemåte og krasje Outlook-klienten.

Mer informasjon

Vi anbefaler at du ikke holder fast på noen MAPIOBJECT referanser som du har hentet gjennom Outlook-objektmodellen lenger enn nødvendig. Dette er fordi det underliggende objektet ofte kan endres. Bruk av et foreldet underliggende objekt kan forårsake uventede feil. Dette gjelder for alle scenarioer der du kanskje må få en MAPIOBJECT referanse gjennom Outlook-objektmodellen, ikke bare scenarioet som nevnes i delen Symptomer.