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

Numéro de la base de connaissances d’origine : 269794

Symptômes

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

Cause

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

Cette limite est à l’échelle du système ; en d’autres termes, si vous exécutez deux programmes qui appellent Advise, la valeur maximale combinée pour les deux programmes doit être inférieure à 7 900.

Solution de contournement

Vous pouvez configurer la taille du tas pour qu’elle soit aussi élevée que 0x800000 en définissant 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 comme <valeur MyApp> .