我有一个第三方应用程序,这样做的唯一的沟通方式就是通过访问所提供的COM组件。 由于互动需要约3分钟这是强制性的,它发生在后台。 所以我试图做的是增加一个参考部件与选项“使嵌入互操作类型” =真,并创建一个测试,通过该接口读取非常基本的数据。 该记录的方式这样做,是由下面的代码:
System sys = new System();
if(Convert.ToBoolean(sys.Initialize()) && Convert.ToBoolean(sys.Login("John Smith", out userInstance)))
Project proj = new Project();
if (Convert.ToBoolean(proj.Open(sys, m_projName, m_scenarioName)))
someValue = proj.Name;
直到BackgroundWorker的使用这个完美的作品。 接着,我会在第一行代码以下错误:
无法投射型“系统.__ ComObject”的COM对象为接口类型“ICAPILib.System”。 此操作失败的原因是对IID“{1F5EB3E2-35F6-11D2-A191-0060083A260B}”的界面处的COM组件调用QueryInterface失败,因为以下错误:错误加载类型库/ DLL。 (从HRESULT异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY))。
我已经尝试过重新注册组件没有任何成功。
当使用BackgroundWorker线程公寓类型显然是MTA。 COM组件具有的ThreadingModel设置为公寓。 如果我的理解这篇文章http://msdn.microsoft.com/en-us/library/eaw10et3.aspx正确的互操作编组应该采取访问对象的照顾。
没有任何人有什么线索我可以尝试,使这项工作?