描述:
我用ATL做出ActiveX控件嵌入IE中,需要在工作线程中发出事件到IE。
看了CSDN许多旧贴,小弟对COM套间基本原理有了点了解,现就是急需哪位高人
能提供一些具体使用 CoMarshalInterThreadInterfaceInStream 和
CoGetInterfaceAndReleaseStream 实现跨线程FireEvent的代码让我们初学者
学习学习就好了。(特别是前一个函数,该传递些什么参数啊?)
PS: 关于使用全局变量保存指针的方法,我已试过,在AcitveX Container Test
可以捕捉到事件,但在IE中无效。为什么啊?
解决方案1:
关注
解决方案2:MSDN 上有很详细的例子说明 也有源码,查询ATL tutorial
解决方案3:MFC对COM的实现多线程支持不好,发个消息到主线程去Fire
解决方案4: http://hubdog.csdn.net/Hubdog/comfag.htm
看看这篇文章有没有用,通过IStream传递
var MarshalStream : pointer;
//源线程
procedure Foo1ThreadFunc; //或者TFoo1.Execute
var Foo : IFoo;
begin
//假设Foo2Thread正处于暂停状态
CoInitializeEx (...);
Foo := CoFoo.Create;
//列集
CoMarshalInterThreadInterfaceInStream (IFoo, Foo, IStream (MarshalStream));
//告诉Foo2Thread 列集完毕
Foo2Thread.Resume;
CoUninitialize;
end;
//用户线程
procedure Foo2ThreadFunc; //或TFoo2.Execute
var Foo : IFoo;
begin
CoInitializeEx (...);
//逆列集
CoGetInterfaceAndReleaseStream (IStream (MarshalStream), IFoo, Foo);
MarshalStream := NIL;
//使用Foo
Foo.Bar;
CoUninitialize;
end;