COM 如何在线程里使用

fadazhao 2016-06-15 11:09:45
在做一个关于OPC 的客户端需要用到com 原来也接触的少。
我定义了一个全局的变量 static COPCServer *opcServer; 在一个按钮下链接了它想开一个线程判断服务器的状态
使用它类下的 opcServer->getStatus(status); 函数失败返回
RPC_E_WRONG_THREAD The application called an interface that was marshalled 这个错误在网上找了些资料说是使用
CoMarshalInterThreadInterfaceInStream(IID_ICircle, opcServer->getServer(), &pStream); 但是pStream 返回null 无解啦求助啊
要怎么解决
...全文
415 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2016-06-15
  • 打赏
  • 举报
回复
在你创建服务的线程中,使用 CoMarshalInterThreadInterfaceInStream 方法 Marshal 到 Stream。 然后,在你的线程中使用 CoGetInterfaceAndReleaseStream 获取实例接口。 使用这个在线程中获取的接口呼叫你的方法。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧