【发布时间】:2015-12-01 05:46:36
【问题描述】:
在我的多线程应用程序中,多个线程通过映射初始化
mapi.MAPIInitialize((0, mapi.MAPI_MULTITHREAD_NOTIFICATIONS))
mapi.MAPIUninitialize() crashes. I got the following call stack from windbg.
mso30win32client!Ordinal250+0x32423
mso30win32client!Ordinal126+0x5b
mso30win32client!Ordinal1337+0x39d
mso30win32client!Ordinal1470+0x17e
mso30win32client!Ordinal1470+0xe
mso40uiwin32client!Ordinal2408+0x19
olmapi32!LINKEDLIST_RemoveKey+0x4e6
olmapi32!HrUninitMso+0x36
olmapi32!MAPIUninitialize+0x9
MSMAPI32!MAPIUninitialize+0x42
MAPI32!MAPIUninitialize+0x5b
mapi+0x11d9
每个线程仅按顺序执行以下 mapi(Outlook 2016) 调用:
1 MAPII初始化
2 MAPIAdminProfiles
3 HrQueryAllRows
4 会话=MAPILogonEx
5 会话.注销
6 MAPIUninitialize
观察:
如果有两个线程 T1 和 T2 .
T1 在 T2 之前登录到会话,并且 T1 在 T2 之后执行 MAPIUninitialize 它不会导致崩溃,
但是,如果 T1 在 T2 之前登录会话,并且 T1 在 T2 之前执行 MAPIUninitialize,则调用 MAPIUninitialize 会导致上述堆栈崩溃。
在 Outlook 2016 中出现崩溃,仅适用于 Outlook 2013 及更低版本。
【问题讨论】:
-
我有类似的错误,但使用 Access OLEDB 引擎(Office Access 2016 的一部分),-stackoverflow.com/questions/37432816/… 尝试更新到 Office 最新版本。
标签: multithreading ms-office office365connectors