多线程调用COM组件有什么特别的地方吗? 我的一个类中某个函数调用了一个COM组件的几个函数,工作正常,但在这个类中启动了一个线程,我把this指针传给了这个线程,但在这个线程中调用这个类的那个函数,COM组件调用出错。可能会是什么问题呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很多com组件都要依附在窗体上面的,就是说你给的指针需要是窗体指针,不过具体要看你是什么com组件 在那个线程中也要用COM初始化,只对单个线程有效CoInitialize(NULL)CoUnInitialize(); 线程之间传interface指针要用到下面的函数:CoMarshalInterThreadInterfaceInStream()CoGetInterfaceAndReleaseStream ()看MSDN中相关说明也了解更多... laiyiling(陌生人++) 说得对应该调用CoInitialize(NULL);---进入套间CoUnInitialize();---退出套间 laiyiling(陌生人++) 说得对应该调用CoInitialize(NULL);---进入套间CoUnInitialize();---退出套间这样是不可以的。CoMarshalInterThreadInterfaceInStream()CoGetInterfaceAndReleaseStream ()这两个我又是理解不了的,为什么加那些参数?跟Stream没关呀! Cline(营营) 说的对,虽然我没试过,但我知道:《COM线程》按照COM对象的执行环境,分为套间线程和自由线程1. 套间线程(apartment thread) 位于一个STA中(Single-Threaded Apartment) 一个套间对应一个线程2. 自由线程(free thread) 位于MTA中(Multi-Threaded Apartment) 一个进程有一个MTA,它可以包含任意数量的自由线程《marshaling》1. 调用者与被调用者如果位于不同的线程中,则调用过程要有两次线程切换,线程切换也需要用到marshaling机制2. COM对象的线程相依性 有的COM对象只能在一个线程中运行 内含UI的COM对象只能在创建线程上运行3.线程之间的marshaling机制与进程间的marshaling过程一致--- 潘爱民我摘录的,欢迎探讨。 请教:使用WinSocket的上传文件到Web服务器的问题? 哪位高手能详细介绍链表问题? 初学VC 寻师征友 限定组合框中只能输入数字和回车符并判断输入的数字在1-100000之间 文档与视图到底是如何联系的 如何传递参数给控件? 数据库访问后内存增加问题。 关于OnDraw函数 求问一个输入法非常不解的问题?? CImageList 中如何设置2个BITMAP/图表 对话框中添加图片,,知道的进 <<<<<<<<<<<<<类的成员变量在那里分配? 新线程是否可以访问老线程中, 类实例的成员变量呢??
CoInitialize(NULL)
CoUnInitialize();
CoMarshalInterThreadInterfaceInStream()
CoGetInterfaceAndReleaseStream ()
看MSDN中相关说明也了解更多...
应该调用
CoInitialize(NULL);---进入套间
CoUnInitialize();---退出套间
应该调用
CoInitialize(NULL);---进入套间
CoUnInitialize();---退出套间
这样是不可以的。CoMarshalInterThreadInterfaceInStream()
CoGetInterfaceAndReleaseStream ()这两个我又是理解不了的,为什么加那些参数?跟Stream没关呀!
按照COM对象的执行环境,分为套间线程和自由线程
1. 套间线程(apartment thread)
位于一个STA中(Single-Threaded Apartment)
一个套间对应一个线程
2. 自由线程(free thread)
位于MTA中(Multi-Threaded Apartment)
一个进程有一个MTA,它可以包含任意数量的自由线程《marshaling》
1. 调用者与被调用者如果位于不同的线程中,则调用过程要有两次线程切换,线程切换也需要用到marshaling机制2. COM对象的线程相依性
有的COM对象只能在一个线程中运行
内含UI的COM对象只能在创建线程上运行3.线程之间的marshaling机制与进程间的marshaling过程一致
--- 潘爱民我摘录的,欢迎探讨。