首页前端开发其他前端知识COM组件里调用JS函数的操作是什么

COM组件里调用JS函数的操作是什么

时间2024-03-28 15:44:03发布访客分类其他前端知识浏览985
导读:这篇文章给大家分享的是“COM组件里调用JS函数的操作是什么”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“COM组件里调用JS函数的操作是什么”吧。...
这篇文章给大家分享的是“COM组件里调用JS函数的操作是什么”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“COM组件里调用JS函数的操作是什么”吧。
  

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

以上就是关于“COM组件里调用JS函数的操作是什么”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: COM组件里调用JS函数的操作是什么
本文地址: https://pptw.com/jishu/655037.html
详解Java程序helloworld的编写、编译和运行 静态代理和动态代理如何理解,两者有何不同?

游客 回复需填写必要信息