MAPI Advise() 呼び出しは0x8007000Eを返します (E_OUTOFMEMORY)
元の KB 番号: 269794
現象
アドバイズ関数を約 7,800 ~ 7,900 回呼び出すと、次のアドバイズ呼び出しがエラー 0x8007000E (E_OUTOFMEMORY) で失敗する可能性があります。
原因
通知は、アドバイズを呼び出すことによって登録され、共有メモリ領域を使用します。 既定では、ヒープ サイズは 0x100000 として設定されます。 新しい通知を登録するときにヒープ サイズを超えた場合は、E_OUTOFMEMORY エラーが返されます。
この制限はシステム全体です。つまり、Advise を呼び出す 2 つのプログラムを実行している場合、両方のプログラムの合計最大値は 7,900 未満である必要があります。
回避策
ヒープ サイズは、次のレジストリ キーを設定することで、0x800000と同じ大きさに構成できます。
HKLM\SOFTWARE\Microsoft\Windows メッセージング サブシステム
値名: SharedMemMaxSize
値の種類: REG_DWORD
値データ: 0x800000
HKLM\SOFTWARE\Microsoft\Windows メッセージング サブシステム\Applications\<MyApp>
値名: SharedMemMaxSize
値の種類: REG_DWORD
値データ: 0x800000
このシナリオでは、 <MyApp> はアプリケーションの名前 (.exe 拡張機能なし) です。 たとえば、アプリケーションが Mad.exe されている場合は、MyApp> 値に< MAD と入力します。