1. 如果使用的是VS2010,則在Class View視窗中右擊_ICalcEvents接口,依次選擇“Add”、“Add Method…”,根據添加方法向導添加AddCompleted方法,如下圖所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaucTMwEzM0cDMyQ2N5M2Y3EWZiZzM0ITZkFWYkFGNkFjNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
若采用的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>