0

在我的 Outlook 插件中,每次需要使用 rdoSession 对象时,我都会创建新的 rdoSession 对象并设置 mapi 对象,如下所示。

Redemption.RDOSession session = Redemption.RedemptionLoader.new_RDOSession(); session.MAPIOBJECT = outlookApplicaitonObject.Session.MAPIOBJECT;

是否有可能在全局范围内拥有一个静态 Redemption.rdoSession 对象,所以我可以在想使用它的时候调用它?我声明了一个静态 RdoSession 对象,它有时会引发以下异常。

无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Redemption.IRDOSession”。此操作失败,因为 IID 为“{E54C5168-AA8C-405F-9C14-A4037302BD9D}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:加载类型库/DLL 时出错。(来自 HRESULT 的异常:0x80029C4A (TYPE_E_CANTLOADLIBRARY))

这是什么原因,是否有可能做我想做的事情?

4

1 回答 1

1

你在使用多个线程吗?您将需要在每个线程上创建一个 RDOSession 实例 - 请参阅http://www.dimastr.com/redemption/faq.htm#Threads了解更多详细信息。

您可以将 Namespace.MAPIOBJECT 的值存储在一个单独的变量中(以便 IMAPISession 在线程之间编组,而不是任何 OOM 或 Redemption 对象),然后在线程本地实例的每个线程上将 RDOSession.MAPIOBJECT 属性设置为该变量RDO 会话。

于 2016-06-10T10:41:44.203 回答