在ActiveX控件中使用多线程后Fire事件的问题

nokialiu 2005-04-29 09:34:57
由于种种原因,在控件中使用了多线程但是当使用子线程Fire事件时遇到了问题.如果控件容器(VB)处理了该事件那么必然会unhandle,而不处理或者在接口调用的地方直接返回事件则没有问题.

那么问题是,当我不得不在子线程中触发事件的话,应该如何处理???
...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
feelmoon 2005-05-24
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/q280512/#appliesto
看看这篇文章,你就知道怎么做了。
记得,在线程中要调用

HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);

。。。。
::CoUninitialize ();
Sander 2005-05-24
  • 打赏
  • 举报
回复
我在ActiveX control test container 测试都可以
pCtrl->Fire();
pCtrl->Postmessage();

听说在IE中,前者不行,不知道是不是
lippens 2005-04-29
  • 打赏
  • 举报
回复
pCtrl->PostMessage
lippens 2005-04-29
  • 打赏
  • 举报
回复
ATL: 要是用Marshal的话简单就简单一点,增加一个接口(A),并在接口里面调用控件的fire event,然后marshal到一个IStream里,做为参数传递给子线程就可以了,子线程收到事件调用A的方法就可以正常fire event了;如果是要用事件,又没有窗口的话,就自己定义一个窗口类的友元,将container设为控件,并将该窗口类的hwnd传给子线程,子线程收到事件,就给这个窗口类发消息,窗口类再个别处理fire event就ok了
MFC: 直接对控件postmessage就可以了
nokialiu 2005-04-29
  • 打赏
  • 举报
回复
MFC
lippens 2005-04-29
  • 打赏
  • 举报
回复
你是用MFC的还是ATL的?
nokialiu 2005-04-29
  • 打赏
  • 举报
回复
我也试过向窗口投递消息来解决,但是问题每次通过AfxGetMainWnd()->GetSaveHwnd()得出的句柄都是空,所以postmessage都无法收到处理.这个窗口问题又如何解决呢?
lippens 2005-04-29
  • 打赏
  • 举报
回复
1. Marshall隐藏接口,在接口中fire事件
2. 向控件的窗口发消息,在消息处理中fire事件

3,245

社区成员

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

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