2016-11-08 37 views
1

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

这是异常消息:

Exception thrown at 0x00007FFDA7716BB9 (Mso20win32client.dll) in Tray.exe: 0xC0000005: Access violation writing location 0x0000000000000000. 

我们尚未能找出原因,它正试图访问该位置。据我们所知,所有的论点都是有效的。

调用堆栈看起来是这样的(我们不必为Outlook的dll符号):

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] 

有一些帖子在那里它谈论类似的问题,其中尤其是,这似乎是相关this one on Experts Exchange,但我们仍然无法找出根本原因或修复方法。

为了缩小问题而创建的有趣峰值(测试程序)不会出现问题。另外MFCMAPI是一种可视化MAPI信息的工具,效果很好,即我们可以使用它登录到相同的配置文件。

有没有其他人看过类似的问题?关于如何调试进一步的想法?

回答

1

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

+0

德米特里,我们的代码使用以下标志调用'MAPILogonEx':'MAPI_EXTENDED | MAPI_UNICODE | MAPI_EXPLICIT_PROFILE | MAPI_BG_SESSION | MAPI_NEW_SESSION',并且这导致上述的调用堆栈,其中调用通过MSMAPI32.dll,然后到达OLMAPI32.dll。我们可以做什么不同?此外,这也用于在几天前没有任何更改的情况下工作。 – floatingfrisbee

+0

另外,我们使用MAPI存根库方法,在我们的项目中使用'MapiStubLibrary.cpp'和'StubUtils.cpp',如下所述:https://msdn.microsoft.com/zh-cn/library/office /cc963763.aspx – floatingfrisbee

+0

那么,是通过调用MAPILogonEx加载的olmapi32.dll,还是在您动态加载msmapi32.dll和/或称为MAPIInitialize之前加载? –