2016-11-08 36 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之前加載? –