【IT专家】在COM组件中调用JavaScript函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

在COM 组件中调用JavaScript 函数

2013/08/13 127 转载自:blog.csdn/cheungmine/article/details/1451489

要求是很简单的,即有COM 组件A 在IE 中运行,使用JavaScript(JS)调用A

的方法longCalc(),该方法是一个耗时的操作,要求通知IE 当前的进度。这就要求

使用回调函数,设其名称为scriptCallbackFunc。实现这个技术很简单:

1 、组件方(C++)组件A 的方法在IDL 中定义:

[id(2)]HRESULTlongCalc([in]DOUBLEv1,[in]DOUBLEv2,[in,optional]VARIANTscript Callback); //假设回调原型为:

//scriptCallbackFunc(LONGnCurrentProgress,LONGnTotalProgress,BSTRbstrProgressNa me); //此方法由JS 脚本来实现STDMETHODIMPCA::longCalc(DOUBLEv1,DOUBLEv2,VARIANTscriptCallback) { CComPtr IDispatch spCallback; if(scriptCallback.vt==VT_DISPATCH) spCallback=scriptCallback.pdispVal; //参数准备CComVariantvarResult; CComVariantavarParams[3]; avarParams[0]=“开始计算股票”;//bstrProgressName avarParams[0].vt=VT_BSTR; avarParams[1]=100;//nTotalProgress avarParams[1].vt=VT_I4; avarParams[2]=0;//nCurrentProgress avarParams[2].vt=VT_I4; DISPPARAMSparams={avarParams,NULL,3,0}; if(spCallback) spCallback- Invoke(0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms, varResult,NULL,NULL); BOOLbFinished=false; while(!bFinished) { //计算工作…Sleep(1000); v1=v1+v2; //回调客户if(spCallback) { avarParams[0]=“正在计算股票…”;avarParams[2]=0; spCallback- Invoke(0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms,varResult,NULL,NULL); }

if(…)bFinished=TRUE; }//whileOK! returnS_OK; } //符合回调原型:scriptCallbackFunc

相关文档
最新文档