您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用COM組件怎么調用JavaScript函數,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
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>
上述就是小編為大家分享的使用COM組件怎么調用JavaScript函數了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。