20110413 15:54 利用事件触发实现ActiveX调用js函数

之前写过文章通过自定义函数来实现ActiveX回调JS中的函数,最近在网上发现一更简洁的方法,通过事件触发,在这里小结一下,为使内容连贯,请参考我之前的《一步一步实现ATL开发的ActiveX组件与javascript的交互》系列文章http://hi.baidu.com/hwygy_001/blog/item/21ec5bc5294f64bd8326ac72.html

1.  如果使用的是VS2010,则在Class View窗口中右击_ICalcEvents接口,依次选择“Add”、“Add Method…”,根据添加方法向导添加AddCompleted方法,如下图所示:

若采用的VS2008,则没有自动的事件方法,需要手工注册,找到项目的.idl文件,在其中的library CalculatorLib中添加如下代码:

dispinterface_ICalcEvents

        {

                properties:

                methods:

                    [id(1)]voidAddCompleted([in]DOUBLE * bstrCmdInfo);

        };

完成手工注册。

2.  然后在Class View窗口中右击CCalc类,依次选择“Add”、“Add Connection Point…”,在弹出的实现连接点窗口中实现_ICalcEvents接口。

3.  完成向导后,VS会自动为我们生成基本框架,包括引发事件的方法Fire_AddCompleted。我们只需在Add方法中添加_ICalcEvents_CP.h(生成的Fire_AddCompleted方法所在文件)头文件,运算并在运算结束时调用Fire_AddCompleted的代码:


STDMETHODIMP CCalc::Add(DOUBLE a, DOUBLE b,DOUBLE * result) 

{ double result; 

*result = a + b; 

 Fire_AddCompleted(result); 

return S_OK; 

}

4.在网页中添加代码进行测试(添加的javascript代码如下),应该能够得到我们想要的效果。

<script type="text/javascript">    

function add() {        

var calc = document.getElementById('Calc');   

    calc.attachEvent("AddCompleted", OnAddCompleted);        

    calc.Add(3, 4);    

}     

function OnAddCompleted(result) {      

  alert(result);    

}

</script>

参考文章:http://www.cnblogs.com/chinadhf/archive/2010/09/03/1817336.html

from:http://hi.baidu.com/hwygy_001/item/fd04a23a2649be0acfb9fe23

原文地址:https://www.cnblogs.com/lidabo/p/2751549.html