Udostępnij za pośrednictwem


Wywołanie MAPI Advise() zwraca 0x8007000E (E_OUTOFMEMORY)

Oryginalny numer KB: 269794

Symptomy

Po wywołaniu funkcji Advise od około 7800 do 7900 razy następne wywołanie Advise może zakończyć się niepowodzeniem z błędem 0x8007000E (E_OUTOFMEMORY).

Przyczyna

Powiadomienia, które są rejestrowane przez wywołanie Advise, wykorzystują udostępnioną przestrzeń pamięci. Domyślnie rozmiar sterty jest ustawiany jako 0x100000. Jeśli rozmiar sterty zostanie przekroczony podczas rejestrowania nowego powiadomienia, zostanie zwrócony błąd E_OUTOFMEMORY.

Ten limit dotyczy całego systemu; innymi słowy, jeśli uruchamiasz dwa programy, które używają funkcji Advise, łącznie maksymalnie oba programy powinny mieć mniej niż 7900.

Rozwiązanie

Można skonfigurować rozmiar sterty do wartości maksymalnej 0x800000, ustawiając następujące klucze rejestru:

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem
Nazwa wartości: SharedMemMaxSize
Typ wartości: REG_DWORD
Dane wartości: 0x800000

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem\Applications\<MyApp>
Nazwa wartości: SharedMemMaxSize
Typ wartości: REG_DWORD
Dane wartości: 0x800000

W tym scenariuszu <MyApp> jest nazwą aplikacji (bez rozszerzenia .exe). Jeśli na przykład aplikacja jest Mad.exe, wprowadź wartość MAD dla <wartości MyApp> .