在我的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))
这是什么原因,是否有可能做我想做的事情?
答案 0 :(得分:1)
您使用的是多线程吗?您需要在每个线程上创建一个RDOSession实例 - 有关更多详细信息,请参阅http://www.dimastr.com/redemption/faq.htm#Threads。
您可以将Namespace.MAPIOBJECT的值存储在一个单独的变量中(以便在线程之间编组IMAPISession,而不是任何OOM或Redemption对象),然后在线程上的每个线程上将RDOSession.MAPIOBJECT属性设置为该变量RDOSession的本地实例。