如何通过整个加载项应用程序

时间:2016-06-10 10:35:23

标签: c# outlook outlook-addin outlook-redemption comobject

在我的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))

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

1 个答案:

答案 0 :(得分:1)

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

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