当前位置:首页 > 日记 > 正文

COM组件中调用JavaScript函数详解及实例

COM组件中调用JavaScript函数详解及实例

COM组件中调用JavaScript函数详解及实例

要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc(),该方法是一个耗时的操作,要求通知IE当前的进度。这就要求使用回调函数,设其名称为scriptCallbackFunc。实现这个技术很简单:

1 、组件方(C++)

组件A 的方法在IDL中定义:

[id(2)] HRESULT longCalc([in] DOUBLE v1, [in] DOUBLE v2, [in, optional] VARIANT scriptCallback); 

组件A的方法实现:

// 假设回调原型为:  // scriptCallbackFunc(LONG nCurrentProgress, LONG nTotalProgress, BSTR bstrProgressName); // 此方法由JS脚本来实现 STDMETHODIMP CA:: longCalc (DOUBLE v1, DOUBLE v2, VARIANT scriptCallback) {   CComPtr<IDispatch> spCallback;   if (scriptCallback.vt == VT_DISPATCH)      spCallback = scriptCallback.pdispVal;       // 参数准备   CComVariant varResult;   CComVariant avarParams[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;   DISPPARAMS params = { avarParams, NULL, 3, 0 };     if(spCallback)      spCallback->Invoke(0,          IID_NULL,          LOCALE_USER_DEFAULT,          DISPATCH_METHOD,          ¶ms, &varResult, NULL, NULL);    BOOL bFinished = 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;    } // while OK!     return S_OK; } 

2、 客户方(JS)

<script language="javascript"> <!--    // 符合回调原型:scriptCallbackFunc    function scfDisplayProgress(nCurrentProgress, nTotalProgress, bstrProgressName)    {        window.status = bstrProgressName + “:”+(nCurrentProgress *100/TotalProgress);    }      // 创建组件并执行longCalc    var objA = new ActiveXObject(“MyCom.A”);      // 使用回调: 执行时在IE状态栏显示进度     objA. longCalc (100, 200, scfDisplayProgress);       // 不使用回调     objA. longCalc (100, 200);  //--> </script> 

3 说明

  • 该技术仅适用于脚本。不适合于VB、C++客户。
  • 该技术和连接点、事件无关。
  • 微软的XML DOM对象广泛使用这个方法。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

在ppt中旋转的方法步骤

在ppt中旋转的方法步骤

步骤,方法,图片,电脑软件,ppt,  有时光放一个图片上去,很单调,旋转之后更有意味。那么要怎么做呢?下面小编来告诉你在ppt中旋转图片的方法吧,希望对你有帮助!在ppt中旋转图片的步骤新建一个ppt演示文稿,键入几行字点击插入,联机图片输入夜晚,选…

JavaScript实现类似淘宝的购物车效

JavaScript实现类似淘宝的购物车效

淘宝,购物车,类似,效果,电脑软件,前言相信大家都很熟悉商品购物车这一功能,每当我们在某宝某东上购买商品的时候,看中了哪件商品,就会加入购物车中,最后结算。购物车这一功能,方便消费者对商品进行管理,可以添加商品,删除商品,选中购物车中的某一项…

ps如何将文字进行栅格化

ps如何将文字进行栅格化

栅格,文字,方法,如何将,电脑软件,  栅格化其实很好用的,对一些图片或者文字要处理就可以栅格化。很多刚学习的新手小伙伴可能还不知道,下面是小编带来关于ps如何将文字进行栅格化的内容,希望可以让大家有所收获!ps将文字进行栅格化的方法打…

怎么把wps文字变成格式把wps文字变

怎么把wps文字变成格式把wps文字变

文字,步骤,方法,图片格式,格式,  如果对wps不太熟练的同学,可能在听到这个要把wps文字变图片的操作,可能都会问一句可能吗,其实是完全可能的,而且还很简单。下面小编教你怎么把wps文字变成图片格式,希望对你有帮助!wps文字变成图片格式的方法步…

canvas绘图不清晰的解决方案

canvas绘图不清晰的解决方案

绘图,解决方案,清晰,电脑软件,canvas,现象描述  同样大小的图片(60x60px)用canvas和DOM绘制,结果发现canvas的画面质量要差很多。结果如下图所示。上图中,左侧红框中的金币采用DOM绘制,右侧和下方的金币和文字等使用canvas绘制,结果canvas绘制…

单页PPT演示制作长文本的方法是什

单页PPT演示制作长文本的方法是什

文本,方法,演示,电脑软件,PPT,  通过对PPT控件工具箱中的文本框控件的设置,可以制作出带滚动条的文本框,能够将大段内容收录其中。以下是小编为您带来的关于单页PPT演示长文本,希望对您有所帮助。单页PPT演示长文本插入文本框控件这个过程主…

怎么在PPT2013中制作数学立方体

怎么在PPT2013中制作数学立方体

立方体,数学,电脑软件,  在用PPT2013制作数学图形时,例如立体矩形,立方体就不好直接用插入形状的方法绘制。难道就没有办法了么?以下是小编为您带来的关于PPT2013中制作数学立方体,希望对您有所帮助。PPT2013中制作数学立方体1 启动PowerPoi…

wps表格中如何快速复制相同内容wps

wps表格中如何快速复制相同内容wps

方法,表格,快速,内容,电脑软件,  表格的编制是办公室里几乎每天都在使用的,同一表格中相同内容的文字要出现在不同行列中,也许你习惯于采用复制、粘贴的方式也处理,但其实在wps表格中有一种很快捷的方式。下面小编告诉是什么吧。wps表格快速…

PPT2010如何制作多媒体相册

PPT2010如何制作多媒体相册

多媒体,电脑软件,  PPT演示文稿是指用PPT软件制作的一系列幻灯片,通过将思维视觉化的方式,用文字、图表、图像和音频视频等载体按照逻辑顺序展示相互关联的思想观点。PPT里面有新建相册的功能,你有没有尝试过呢。将自己的相片整理成一个有序…

JavaScript高阶函数_动力节点Java

JavaScript高阶函数_动力节点Java

高阶函数,学院,节点,动力,电脑软件,高阶函数英文叫Higher-order function。那么什么是高阶函数?JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为…

excel表格数字显示异常的解决方法

excel表格数字显示异常的解决方法

显示,解决方法,数字,表格,电脑软件,  Excel中该如何解决数字显示异常的问题呢?下面是小编带来的关于excel表格数字显示异常的解决方法,希望阅读过后对你有所启发!excel表格数字显示异常的解决方法:  数字显示异常步骤1:当你发现输入的一串…

微信小程序使用Socket的实例

微信小程序使用Socket的实例

实例,程序,电脑软件,微信小,Socket,微信小程序使用Socket的实例首先,一个小程序同时只能有一个WebSocket连接,如果当前已经存在一个WebSocket连接,会关闭当前连接,并重新建立一个连接。其次,如果使用了appID,协议必须是 wss://...最近团队用小程…