VC與JavaScript互動(二)

來源:互聯網
上載者:User

標籤:

最近關於vc++裡面通過IDispatch的Invoke來實現和js的互動做點了tp,並且對以前不瞭解的“直接讀取js變數值”和“傳遞多個參數”的部分重新實現了下。

1,調用js的函數,並傳遞多個參數

CComQIPtr<IHTMLDocument2> pDoc = m_browser.get_Document();if (pDoc){CComQIPtr<IDispatch> spDisp;HRESULT hr = pDoc->get_Script(&spDisp);if (SUCCEEDED(hr)){   //要調用的函數名TCHAR* szMember = _T("setText");DISPID dispid;HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1,LOCALE_SYSTEM_DEFAULT, &dispid);if (SUCCEEDED(hr)){DISPPARAMS dispparams;memset(&dispparams, 0, sizeof dispparams);dispparams.cArgs = 2;//要傳遞的參數,注意強烈推薦用下面這個形式。傳送string的時候,改為BSTR就可以。                                  CComVariant* pvars = new CComVariant[2];   pvars[1] = L"1";     pvars[0] = L"2";   pvars[0].ChangeType(VT_I4);pvars[1].ChangeType(VT_I4);dispparams.rgvarg = pvars;dispparams.cNamedArgs = 0;EXCEPINFO excepInfo;memset(&excepInfo, 0, sizeof(excepInfo));CComVariant vaResult;UINT nArgErr = (UINT)-1;  // initialize to invalid arghr = spDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);}}}

2,直接讀取js的變數(不是通過對某個控制項賦值再讀取的形式)

CComQIPtr<IHTMLDocument2> pDoc = m_browser.get_Document();if (pDoc){CComQIPtr<IDispatch> spDisp;HRESULT hr = pDoc->get_Script(&spDisp);if (SUCCEEDED(hr)){                         //js中的變數名字TCHAR* szMember = _T("nItem");DISPID dispid;HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1,LOCALE_SYSTEM_DEFAULT, &dispid);if (SUCCEEDED(hr)){DISPPARAMS dispparams;memset(&dispparams, 0, sizeof dispparams);EXCEPINFO excepInfo;memset(&excepInfo, 0, sizeof(excepInfo));CComVariant vaResult;UINT nArgErr = (UINT)-1;  // initialize to invalid arghr = spDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET,&dispparams,&vaResult,&excepInfo,&nArgErr);}}}

參考:

http://blog.csdn.net/hzlyh/article/details/5411086

可惜對js的變數直接賦值的時候,Invoke一直不能成功,還有待於繼續調查。。。。。

VC與JavaScript互動(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.