永发信息网

c#调用C开发的COM组件生成的DLL

答案:2  悬赏:0  手机版
解决时间 2021-02-07 18:37
  • 提问者网友:谁的错
  • 2021-02-06 20:08
c#调用C开发的COM组件生成的DLL, 在主线程中正常调用 没问题,我用FOR语句多次调用正常 如果另开启一个线程就会报错,错误信息如下:
未处理 System.InvalidCastException
Message="无法将类型为“OPLoadS.OPGetClass”的 COM 对象强制转换为接口类型“OPLoadS.IOPGet”。此操作失败的原因是对 IID 为“{3356EC38-7543-4E2E-B985-42F2EFB4B7BE}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。"
最后我把线程改为TIMER,也是这个错误,我在网上查了多线程调用COM的问题,都没解决,还请高手帮忙
能通过其它办法解决我要实现的功能也可以:在不干扰主线程的情况下,一直运行COM提供的方法,
谢谢
最佳答案
  • 五星知识达人网友:末日狂欢
  • 2021-02-06 21:00
这些不用你担心,这要你把Com导入进去,然后申明DllImport调用哪个方法。
其他的系统会自动做转换的,就是说C++类型会自己转化成C#类型的。

补充:句柄什么的你可能要用C#的Unsafe代码,比如说窗口的句柄可以这样获取
IntPtr handle = pictureBox.Handle;
全部回答
  • 1楼网友:行雁书
  • 2021-02-06 21:08
虽然我很聪明,但这么说真的难到我了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯