COM组件中调用JavaScript函数的实例讲解

  • 更新时间:2020-03-27 10:21:45
  • 编辑:黎文光

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对象广泛使用这个方法。

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

相关教程

  • 关于Vue Component组件注册

    这篇文章主要介绍了Vue源码解读之Component组件注册的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2020-03-09

  • Python调用C# Com dll组件的方法详解

    下面小编就为大家带来一篇Python调用C# Com dll组件实战教程。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2020-01-05

  • HTML CSS JavaScript网页制作从入门到精通

    HTML CSS JavaScript网页制作从入门到精通

    HTML CSS JavaScript网页制作从入门到精通 第3版 共分为19章和4个附录,重点介绍使用HTML进行网页制作的方方面面,同时讲解了目前流行的Web标准与CSS网页布局实例,以及基于JavaScript语言的网页特

    大小:65.2 MB网页制作电子书

  • 第三方JavaScript编程

    第三方JavaScript编程

    第三方JavaScript应用程序是自包含的应用组件,通常都是小脚本或插件,能够为Web站点增加功能。它们往往是由独立的组织或个人提供的,代码和文件都是来自于远程的Web地址。 《第三方JavaS

    大小:74.2 MBJavaScript电子书

  • 21天学通HTML+CSS+JavaScript Web开发

    21天学通HTML+CSS+JavaScript Web开发

    21天学通HTML CSS JavaScript Web开发(第7版) 是全球畅销书《21天学通使用HTML与CSS发布Web站点》的全新升级版本,作者在本书囊括了新的HTML5与CSS3技术,并采用易于理解的步骤式教程讲解了这些技

    大小:104.9 MB前端电子书

  • 移动网页设计与开发:HTML5+CSS3+JavaScript

    移动网页设计与开发:HTML5+CSS3+JavaScript

    将落伍的网址打导致更为灵便、友善,而且令其充分运用不一样机器设备和电脑浏览器的与众不同优点。根据《移动网页设计与开发HTML5+CSS3+JavaScript》,您将为投身第一线开发充分准备! *內容

    大小:30.2 MB移动开发电子书

  • 同构JavaScript应用开发

    同构JavaScript应用开发

    大小:10.4 MBJavaScript电子书

  • 趣学JavaScript:教孩子学编程

    趣学JavaScript:教孩子学编程

    大小:42.7 MBJavaScript电子书

  • Three.js开发指南:WebGL的JavaScript 3D库

    Three.js开发指南:WebGL的JavaScript 3D库

    大小:180.1 MBThree.js电子书

  • JavaScript从入门到精通

    JavaScript从入门到精通

    本书是javascript高级程序的权威指南,从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用JavaScript语言进行程序开发应该掌握的各方面技术,是一本入门经典书籍

    大小:92.2 MBJavaScript电子书

  • 精通JavaScript

    精通JavaScript

    精通JavaScript(第2版) 是iQuery之父的经典之作,是深入学习JavaScript技术的绝佳教材,涵盖了可重用代码、文档对象模型、Ajax、Web生产工具、AngularJS等内容。作者讲解了JavaScript的发展现状、实用技

    大小:33.5 MBJavaScript电子书

  • JavaScript网页动画设计

    JavaScript网页动画设计

    JavaScript网页动画设计 由业界先进的动画库Velocity。js的作者所著,书中内容共分为8章,简明扼要地总结了在网页上使用动画的技术技巧,让读者掌握如何有效利用动画实现无与伦比的用户体验

    大小:26 MBJavaScript电子书

用户留言