1.项目中使用了ocx封装c++接口,除了属性和方法,还自定义了几个fire事件。但是奇怪的是,使用TSTCON32工具时,一切正常,但是使用html+js网页时,事件只能接收到最后一个。
2.介绍一下背景,我用ocx封装的对外接口,我本身的sdk是异步接口,也就是每个接口调用完了,有一个异步的导出类,把结果返回来,我用回调函数将这些数据通过ocx的fire自定义事件传到外部去。
3.奇怪的是,我所有的异步事件中,只有一个最后的退出通知接口可以被网页接收到。因为大家都说因为js不支持多线程,所以会导致主线程外触发的fire无法被外部js获取到。我最后一个能获取到,可能退出的线程和其他的不一样。
4.解决思路:使用自定义postmessage消息代替回调,解决问题,外部可以接收到所有的事件通知。
5.postmessage的实现:
5.1主头文件声明自定义消息,ctrl类中声明类句柄
5.2ctrl类中添加自定义消息映射
5.3自定义函数中调用fire事件
5.4调用自定义消息
此时网页中可以正常接收到fire事件。