Вызов MAPI Advise() возвращает 0x8007000E (E_OUTOFMEMORY)

Исходный номер базы знаний: 269794

Симптомы

При вызове функции Совет около 7800–7900 раз следующий вызов Совет может завершиться ошибкой 0x8007000E (E_OUTOFMEMORY).

Причина

Уведомления, зарегистрированные с помощью вызова "Совет", используют пространство общей памяти. По умолчанию размер кучи устанавливается как 0x100000. Если размер кучи превышен при регистрации нового уведомления, возвращается ошибка E_OUTOFMEMORY.

Это ограничение для всей системы; Иными словами, если вы запускаете две программы, которые называются Советом, совокупный максимум для обеих программ должен быть меньше 7900.

Обходной путь

Вы можете настроить размер кучи до 0x800000, задав следующие разделы реестра:

Подсистема обмена сообщениями HKLM\SOFTWARE\Microsoft\Windows
Имя значения: SharedMemMaxSize
Тип значения: REG_DWORD
Данные о значении: 0x800000

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem\Applications\<MyApp>
Имя значения: SharedMemMaxSize
Тип значения: REG_DWORD
Данные о значении: 0x800000

В этом сценарии <MyApp> — это имя приложения (без расширения .exe). Например, если приложение Mad.exe, введите MAD в <качестве значения MyApp> .