国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

COM組件中調用JavaScript函數詳解及實例

2019-11-19 17:26:36
字體:
來源:轉載
供稿:網友

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對象廣泛使用這個方法。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜阳县| 邢台县| 木里| 台前县| 丹寨县| 桃江县| 西藏| 乐平市| 平罗县| 滦平县| 馆陶县| 绥化市| 克东县| 志丹县| 墨脱县| 大理市| 土默特左旗| 舒兰市| 平顶山市| 昭平县| 二手房| 清水河县| 盐源县| 兰州市| 富民县| 四会市| 大英县| 大足县| 扎兰屯市| 龙口市| 叶城县| 工布江达县| 威信县| 汶上县| 家居| 遵化市| 沈丘县| 麦盖提县| 镇沅| 阳新县| 鄂托克旗|