【问题标题】:I get MAPI_E_UNKNOWN_ENTRYID when do GetMessageFromID() in thread through Redemption当通过 Redemption 在线程中执行 GetMessageFromID() 时,我得到 MAPI_E_UNKNOWN_ENTRYID
【发布时间】:2016-12-07 21:32:47
【问题描述】:

我使用 Redemption (http://dimastr.com/redemption/home.htm) 来开发我的 Outlook 插件。当我第一次在 STA-thread(!) 中尝试 GetMessageFromId 时一切都很好,但在下一次我得到 MAPI_E_UNKNOWN_ENTRYID。

    RDOSession rdoSession = null;.
    rdoSession = new RDOSession();
    if (rdoSession != null)
    {
         if (!rdoSession.LoggedOn) 
            rdoSession.Logon(Consts.ProfileName);
         if (rdoSession.LoggedOn)
         {
           for (int c = 1; c <= rdoStoresCnt; c++)
           { 
            /* other code */
            RDOMail mail = null;
            try
            {
               mail = rdoSession.GetMessageFromID(entryID);
               /*  other code  */
            }
            catch (Exception ex) 
            {
             if (mail != null) Marshal.ReleaseComObject(mail); mail = null;
            }
            finally
            {
             if (mail != null) Marshal.ReleaseComObject(mail); mail = null;
            }
           }
        } 
    }

我做错了什么?

【问题讨论】:

    标签: c# multithreading outlook mapi outlook-redemption


    【解决方案1】:

    MAPI_E_UNKNOWN_ENTRYID 表示当前 MAPI 会话(通过调用 RDOSession.Logon 创建)不知道应该由哪个 MAPI 提供程序处理指定的条目 ID,因为(很可能)该提供程序尚未在该会话中加载并且确实n 有机会在会话中向 MAPI 系统注册其条目 ID 集。

    您可以尝试在调用GetMessageFromId时指定商店入口id(兑换会先打开指定商店并调用IMsStore::OpenEntry而不是IMAPISession::OpenEntry),但真正的解决方案是避免在全部 - 由于您的代码在 Outlook 中,因此 Outlook 已经使用了 MAPI 会话:只需从 Outlook 将 RDOSession.MAPIOBJECT 属性设置为 Namespace.MAPIOBJECT。在这种情况下,请不要致电RDOSession.Logoff

    【讨论】:

    • 感谢您的回复。但我无法将RDOSession.MAPIOBJECT 设置为Namespace.MAPIOBJECT,因为它可以在线程中使用,还是我错了?
    • 谢谢。在调用GetMessageFromId 时使用RDOStore 得到了帮助。
    • 请设置 MAPIOBJECT 属性,不要在插件中创建新会话。线程将非常好 - 将 Namespace.MAPIOBJECT 的值存储在主线程上。在辅助线程上,创建 RDOSession 的新实例,将 MAPIOBJECT 属性设置为保存在主线程上的值。这样,命名空间 OOM 对象永远不会在线程之间传递,只有来自 MAPIOBJECT 属性的 IMAPISession (非常好)。
    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多