ATL COM事件问题:在线程中调用虚函数,再在虚函数中激发事件的问题??

时间:2021-12-28 18:38:32
class CA
{
  ..
  ..
  CB b;
  CB c;
  void fun();
}

CB b
{
  virtural int fun();
  CA *pa;
}

int CB::fun()
{
   pa->fuc2();
}

void CA::fun()
{
   Fire_XXX();
}

  Fire_XXX事件已调用,但前端没有事件激活???

23 个解决方案

#1


线程开始初始化com:
::CoInitialize(NULL);
结束:
::CoUninitialize();

#2


我试过了,不行

#3


关注

#4


mark,想想

#5


gz

#6


我希望解决问题啊。谁知道啊

#7


你映射了相应的事件了吗?

#8


没人知道?

#9


这和你的函数没有关系,你的连接点设置正确了吗?Events接口设对了吗/你先自己检查一下。用VC 6的ATL向导生成的程序有些有问题,你自己好好检查吧,实在不行发给我:sohou_studio@163.com

#10


不要将源接口实现为双接口,也就是那个event接口,这样在VB 和SCRIPT语言中很容易出错

#11


只实现它的Idispatch接口

#12


还是不行呀。

#13


TO: sohou(大秦之刃)
  帮我看看。

#14


你客户端是用什么语言写的啊!

#15


如果是VC的话你自己hook它

#16


我对COM不是很熟啊。

#17


我没收到你的邮件

#18


看来是你的客户端没有接收这个事件!

#19


接收到了。我在方法内激活事件就没问题。但到了线程内就不行了。

#20


我看了你的代码我没发现你的代码有什么问题,但是我怀疑你的script写的那个test有问题。我对script不熟

#21


线程内当然不行。因为你接口跨了套间。跨套间调用要列集/散列接口。即使是事件接口。
最简单的方法(也是最流行的),是你在将你的Fire,改为postthreadmessage给主线程消息, 再由主线程fire(主线程建立的事件连接)

#22


MFC/ATL列集/散列的代码没有考虑跨线程调用。你需要自己实现列集/散列,例如发送自定义消息消息或者自行修改列集/散列代码。
参见http://www.mvps.org/vcfaq/com/1.htm

#23


我已经解决了。


to jiangsheng(蒋晟.MSMVP2004Jan) 
   你要是早来点多好啊。

#1


线程开始初始化com:
::CoInitialize(NULL);
结束:
::CoUninitialize();

#2


我试过了,不行

#3


关注

#4


mark,想想

#5


gz

#6


我希望解决问题啊。谁知道啊

#7


你映射了相应的事件了吗?

#8


没人知道?

#9


这和你的函数没有关系,你的连接点设置正确了吗?Events接口设对了吗/你先自己检查一下。用VC 6的ATL向导生成的程序有些有问题,你自己好好检查吧,实在不行发给我:sohou_studio@163.com

#10


不要将源接口实现为双接口,也就是那个event接口,这样在VB 和SCRIPT语言中很容易出错

#11


只实现它的Idispatch接口

#12


还是不行呀。

#13


TO: sohou(大秦之刃)
  帮我看看。

#14


你客户端是用什么语言写的啊!

#15


如果是VC的话你自己hook它

#16


我对COM不是很熟啊。

#17


我没收到你的邮件

#18


看来是你的客户端没有接收这个事件!

#19


接收到了。我在方法内激活事件就没问题。但到了线程内就不行了。

#20


我看了你的代码我没发现你的代码有什么问题,但是我怀疑你的script写的那个test有问题。我对script不熟

#21


线程内当然不行。因为你接口跨了套间。跨套间调用要列集/散列接口。即使是事件接口。
最简单的方法(也是最流行的),是你在将你的Fire,改为postthreadmessage给主线程消息, 再由主线程fire(主线程建立的事件连接)

#22


MFC/ATL列集/散列的代码没有考虑跨线程调用。你需要自己实现列集/散列,例如发送自定义消息消息或者自行修改列集/散列代码。
参见http://www.mvps.org/vcfaq/com/1.htm

#23


我已经解决了。


to jiangsheng(蒋晟.MSMVP2004Jan) 
   你要是早来点多好啊。