描述:
ocx控件是用VC++6.0编写,在网页中用vbs调用其中的方法和事件
但是很奇怪,在vb里面查看,事件可以fire,但是在网页里面,fire不了(实际应该已经fire).
这是什么原因呢?是否是控件的问题,请高手指点
解决方案1:
实现Com在工作线程中FireEvent的主要方法有:
1. PostMessage到主线程中,再由主线程消息响应函数FireEvent
2. 实现GIT(全局接口表),继承CComDynamicUnkArray_GIT类。
3. 继承IConnectionPointImplMT类。
4. 利用CoMarshalInterThreadInterfaceInStream和CoGetInterfaceAndReleaseStream
列集接口指针。
注意,2.3.4点都需要在工作线程中CoInitializeEx和CoUninitialize。
//////////////////////////////////////////////////////////////////////////////////
下面是jiangsheng(蒋晟.MSMVP2004Jan)老大的精彩回贴:
Knowledge Base Article Q157437: "Fireev.exe Fires Events from a Second Thread"
http://support.microsoft.com/support/kb/articles/q157/4/37.asp
Knowledge Base Article Q196026: "PRB: Firing Event in Second Thread Causes IPF or GPF"
http://support.microsoft.com/support/kb/articles/q196/0/26.asp
Michael Lindig's ATL: Firing events from worker threads article on CodeGuru.com
http://www.codeguru.com/atl/ThreadEvents.shtml
Knowledge Base Article Q280512: "SAMPLE: ATLCPImplMT Encapsulates ATL Event Firing Across COM Apartments"
http://support.microsoft.com/support/kb/articles/q280/5/12.asp
COM FAQ 11: HOWTO: Post messages to a hidden window for raising events from an Apartment-threaded object employing worker threads
http://www.mvps.org/vcfaq/com/11.htm
套间问题。
可以用几种办法,请查考下面文章
http://www.mvps.org/vcfaq/com/1.htm