COM 多线程 事件订阅问题

darnis 2008-06-30 06:11:35
遇到一个问题,关于COM 的,(OPC 规范)
在我们应用中,使用了一个线程来对 该 COM 对象进行操作.
并且该 COM 对象, 支持通过 IConnectionPointContainer 增加 IDataCallBack 回调处理变化数据.

所有工作包括 初始化 COM 对象, 中间操作, 以及订阅变化数据这些过程全部在这个线程中完成,
但是为什么所有 为什么 我这边 IDataCallBack 就收不到变化数据呢?
以前实现的时候,使用 所有与 COM 对象操作的时候,都使用 了 Synchronize 来让主线程做工作,
是没有问题的.

对COM的理解不够深入 ,怎么才能让子线程实现完整的 COM操作呢?
...全文
119 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
darnis 2008-07-07
  • 打赏
  • 举报
回复
COM Server 是不能改变的
只能用现有的方式。

呵,,没人来拿分,都给你啦。!
ouyh12345 2008-07-02
  • 打赏
  • 举报
回复
为什么不用事件?
darnis 2008-07-02
  • 打赏
  • 举报
回复
请教了 ATField 把问题解决了。
是由于 COM 多线程调用产生的套间问题引起的。
在操纵COM对象的子线程中加入消息循环处理问题解决了。

Delphi 中的示例代码。

在 Execute 处理中循环处理中加入:


while PeekMessage(lpmsg, 0, 0, 0, PM_REMOVE) do
begin
if lpmsg.message = WM_QUIT then break;
DispatchMessage(lpmsg);
end;

3,245

社区成员

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

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