La llamada a ADVISE() mapi devuelve 0x8007000E (E_OUTOFMEMORY)

Número de KB original: 269794

Síntomas

Al llamar a la función Advise entre 7.800 y 7.900 veces, la siguiente llamada a Advise puede producir un error con el 0x8007000E de error (E_OUTOFMEMORY).

Causa

Las notificaciones, que se registran mediante una llamada a Advise, usan un espacio de memoria compartida. De forma predeterminada, el tamaño del montón se establece como 0x100000. Si se supera el tamaño del montón al registrar una nueva notificación, se devuelve el error E_OUTOFMEMORY.

Este límite es de todo el sistema; es decir, si ejecuta dos programas que llaman a Advise, el máximo combinado para ambos programas debe ser inferior a 7 900.

Solución alternativa

Puede configurar el tamaño del montón para que sea tan alto como 0x800000 estableciendo las siguientes claves del Registro:

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem
Nombre del valor: SharedMemMaxSize
Tipo de valor: REG_DWORD
Datos de valor: 0x800000

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem\Applications\<MyApp>
Nombre del valor: SharedMemMaxSize
Tipo de valor: REG_DWORD
Datos de valor: 0x800000

En este escenario, <MyApp> es el nombre de la aplicación (sin la extensión .exe). Por ejemplo, si la aplicación está Mad.exe, escriba MAD para el <valor MyApp> .