La chiamata MAPI Advise() restituisce 0x8007000E (E_OUTOFMEMORY)

Numero KB originale: 269794

Sintomi

Quando si chiama la funzione Advise da circa 7.800 a 7.900 volte, la successiva chiamata advise potrebbe non riuscire con l'errore 0x8007000E (E_OUTOFMEMORY).

Causa

Le notifiche, registrate chiamando Advise, usano uno spazio di memoria condiviso. Per impostazione predefinita, le dimensioni dell'heap vengono impostate come 0x100000. Se le dimensioni dell'heap vengono superate durante la registrazione di una nuova notifica, viene restituito l'errore E_OUTOFMEMORY.

Questo limite è a livello di sistema; in altre parole, se si eseguono due programmi che chiamano Advise, il massimo combinato per entrambi i programmi deve essere inferiore a 7.900.

Soluzione alternativa

È possibile configurare le dimensioni dell'heap fino a 0x800000 impostando le chiavi del Registro di sistema seguenti:

Sottosistema HKLM\SOFTWARE\Microsoft\Windows Messaging
Nome valore: SharedMemMaxSize
Tipo di valore: REG_DWORD
Dati valore: 0x800000

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem\Applications\<MyApp>
Nome valore: SharedMemMaxSize
Tipo di valore: REG_DWORD
Dati valore: 0x800000

In questo scenario MyApp<> è il nome dell'applicazione (senza l'estensione .exe). Ad esempio, se l'applicazione è Mad.exe, immettere MAD per il <valore MyApp> .