C++中调用JS代码的问题2013-11-04 风镐 前段时间开发了一个COM组件配合web前端使用,遇到了C++中调用JS代码的问题,在网上查了很多资料,现 总结一下,留作以后察看。C++中调用JS代码主要有两种情况:1. IE线程中调用;2. 其他线程调用1. IE线程中调用:这种情况网上已经有很多资料,下面列出示列代码:C++代码
STDMETHODIMP CJsInvoker::InvokeJsFunc(LONG para1, LONG para2, VARIANT jsFunction, LONG* retValue){CComPtr<IDispatch> jsCallback;if (jsFunction.vt == VT_DISPATCH)jsCallback = jsFunction.pdispVal;VARIANT arg[2];arg[0].vt = VT_I4;arg[1].vt = VT_I4;arg[0].lVal = para1;arg[1].lVal = para2;VARIANT pvarRet;jsCallback.InvokeN(static_cast<DISPID>(DISPID_VALUE), arg, 2, &pvarRet);*retValue = pvarRet.lVal;return S_OK;}
JS代码
<script type="text/javascript">// 两个参数的回调方法function jsCallbackFunc(a, b){return a + b;} var obj = new ActiveXObject("ComCallJsFunction.JsInvoker");var retValue = objA.InvokeJsFunc(1, 2, jsCallbackFunc);alert(retValue); // 返回值为3</script>
从代码中可以看出,Js方法作为IDispatch指针传入COM,C++通过调用其InvokeN 方法实现。