L’appel MAPI Advise() renvoie 0x8007000E (E_OUTOFMEMORY)

Numéro de la ko d’origine :   269794

Symptômes

Lorsque vous appelez la fonction Advise environ 7 800 à 7 900 fois, l’appel de conseil suivant peut échouer avec l’erreur 0x8007000E (E_OUTOFMEMORY).

Cause

Les notifications, qui sont enregistrées en appelant Advise, utilisent un espace mémoire partagé. Par défaut, la taille du tas est définie comme 0x100000. Si la taille du tas est dépassée lors de l’inscription d’une nouvelle notification, l’erreur E_OUTOFMEMORY est renvoyée.

Cette limite est à l’échelle du système ; En d’autres termes, si vous exécutez deux programmes qui appellent Advise, le maximum combiné pour les deux programmes doit être inférieur à 7 900.

Solution de contournement

Vous pouvez configurer la taille du tas pour qu’elle soit aussi élevée que 0x800000 en configurant les clés de Registre suivantes :

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem
Nom de la valeur : SharedMemMaxSize
Type de valeur : REG_DWORD
Données de valeur : 0x800000

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem\Applications\<MyApp>
Nom de la valeur : SharedMemMaxSize
Type de valeur : REG_DWORD
Données de valeur : 0x800000

Dans ce scénario, <MyApp> est le nom de votre application (sans l’extension .exe). Par exemple, si votre application est Mad.exe, entrez MAD pour la <MyApp> valeur.