Outlook 登录到MAPI配置文件时发生AccessViolationException

Outlook 登录到MAPI配置文件时发生AccessViolationException,outlook,ms-office,mapi,outlook-2016,Outlook,Ms Office,Mapi,Outlook 2016,我们的应用程序的一部分是一个windows进程,它在后台登录MAPI并为电子邮件编制索引。它适用于许多不同版本的Outlook,几天前还用于Outlook 2016。现在,当登录到MAPI配置文件时,它会出现AccessViolationException 这是异常消息: Exception thrown at 0x00007FFDA7716BB9 (Mso20win32client.dll) in Tray.exe: 0xC0000005: Access violation writing l

我们的应用程序的一部分是一个windows进程,它在后台登录MAPI并为电子邮件编制索引。它适用于许多不同版本的Outlook,几天前还用于Outlook 2016。现在,当登录到MAPI配置文件时,它会出现AccessViolationException

这是异常消息:

Exception thrown at 0x00007FFDA7716BB9 (Mso20win32client.dll) in Tray.exe: 0xC0000005: Access violation writing location 0x0000000000000000.
我们还没有弄清楚它为什么要访问那个位置。就我们所知,所有的论点都是有效的

调用堆栈如下所示(我们没有Outlook DLL的符号):

有一些帖子讨论了类似的问题,其中一个似乎特别相关,但我们仍然无法确定根本原因或修复方法

有趣的是,为缩小问题范围而创建的峰值(测试程序)并没有显示问题。此外,MFCMAPI是一种可视化MAPI信息的工具,工作良好,即我们能够使用它登录到相同的配置文件


还有谁见过类似的问题吗?关于如何进一步调试有什么想法吗?

您正在加载olmapi32.dll。不要这样做-加载msmapi32.dll

Dmitry,我们的代码正在使用以下标志调用
MAPILogonEx
MAPI_EXTENDED | MAPI_UNICODE | MAPI_EXPLICIT_PROFILE | MAPI_BG_SESSION | MAPI_NEW_SESSION
,这将导致上面描述的调用堆栈,在该堆栈中调用将通过MSMAPI32.dll,然后通过OLMAPI32.dll。我们能做些什么不同的事情?而且,直到几天前,这种方法还可以正常工作,没有任何更改。此外,我们正在使用MAPI存根库方法,在我们的项目中使用
MapiStubLibrary.cpp
StubUtils.cpp
,如此处所述:调用MAPILogonEx加载的olmapi32.dll也是如此,还是在动态加载msmapi32.dll和/或调用MAPIInitialize时加载的?似乎是调用
MAPIInitialize
加载的
olmapi32.dll。此外,还发现了相同的问题。阅读本文之后,我们发现当我们在不同于MAPIInitialize的线程上调用MAPILogonEx时,问题会重新出现。表面上看,这似乎是个问题,但正如我在问题中所说的,这段代码在许多不同版本的Outlook上运行了好几个月,直到最近才开始在Outlook 2016上失败。
 Mso20win32client.dll!00007ffda7716bb9()    Unknown
 OLMAPI32.DLL!00007ffda48e325e()    Unknown
 OLMAPI32.DLL!00007ffda48274e1()    Unknown
 OLMAPI32.DLL!00007ffda4827466()    Unknown
 OLMAPI32.DLL!00007ffda4827408()    Unknown
 OLMAPI32.DLL!00007ffda4827317()    Unknown
 CONTAB32.DLL!00007ffdee6a14f6()    Unknown
 OLMAPI32.DLL!00007ffda482670c()    Unknown
 OLMAPI32.DLL!00007ffda48261cd()    Unknown
 OLMAPI32.DLL!00007ffda48253c6()    Unknown
 OLMAPI32.DLL!00007ffda481653c()    Unknown
 OLMAPI32.DLL!00007ffda4815dc8()    Unknown
 MSMAPI32.DLL!00007ffdef225ee6()    Unknown
 [External Code]