MAPI Advise () 调用返回0x8007000E (E_OUTOFMEMORY)

原始 KB 编号:   269794

症状

调用 Advise 函数大约 7,800 到 7,900 次时,下一个 Advise 调用可能会失败,0x8007000E (E_OUTOFMEMORY) 。

原因

通过调用 Advise 注册的通知使用共享内存空间。 默认情况下,堆大小设置为0x100000。 如果在注册新通知时超过堆大小,E_OUTOFMEMORY错误。

此限制是系统范围的;换句话说,如果运行的是两个调用 Advise 的程序,则两个程序的组合最大值应小于 7,900。

解决方法

可以通过设置以下注册表项将堆大小配置为0x800000大小:

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem
值名称:SharedMemMaxSize
值类型:REG_DWORD
值数据:0x800000

HKLM\SOFTWARE\Microsoft\Windows Messaging Subsystem\Applications\<MyApp>
值名称:SharedMemMaxSize
值类型:REG_DWORD
值数据:0x800000

在此方案中, <MyApp> 是应用程序的名称, (.exe 扩展名) 。 例如,如果应用程序已Mad.exe,则输入 MAD 作为 <MyApp> 值。