您的位置:首页 > Web前端 > JavaScript

VC调用JS

2013-02-26 12:47 99 查看
bool CGetWebApp::SetDocument(IDispatch* pDisp)

{

    CHECK_POINTER(pDisp);

    m_spHtmlDoc = NULL;

    CComPtr<IDispatch> spScript = pDisp;

    HRESULT hr = spScript->QueryInterface(IID_IHTMLDocument2,(void**)&m_spHtmlDoc);

    if(FAILED(hr))

    {

        return false;

    }

    return true;

}   

bool CGetWebApp::GetJScript(CComPtr<IDispatch>& spScript)

{

    CHECK_POINTER(m_spHtmlDoc);

    HRESULT hr = m_spHtmlDoc->get_Script(&spScript);

    ATLASSERT(SUCCEEDED(hr));

    return SUCCEEDED(hr);

}

bool CGetWebApp::CallJScript(const CString strFunc, const CStringArray& paramArray, CComVariant* pVarResult)

{

    CComPtr<IDispatch> spScript;

    if (!GetJScript(spScript))

    {

        return FALSE;

    }

    CComBSTR bstrMember(strFunc);

    DISPID dispid = NULL;

    HRESULT hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);

    if(FAILED(hr))

    {

        return FALSE;

    }

    const int INT_PTR = paramArray.GetSize();

    DISPPARAMS dispparams;

    memset(&dispparams, 0, sizeof dispparams);

    dispparams.cArgs = INT_PTR;

    dispparams.rgvarg = new VARIANT[dispparams.cArgs];

    for( int i = 0; i < INT_PTR; i++)

    {

        CComBSTR bstr = paramArray.GetAt(INT_PTR - 1 - i); // back reading

        bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);

        dispparams.rgvarg[i].vt = VT_BSTR;

    }

    dispparams.cNamedArgs = 0;

    EXCEPINFO excepInfo;

    memset(&excepInfo, 0, sizeof excepInfo);

       CComVariant vaResult;

    UINT nArgErr = (UINT)-1;  // initialize to invalid arg

    

    hr=spScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);  //调用js函数

    delete [] dispparams.rgvarg;

    if(FAILED(hr))

    {

        return FALSE;

    }   

    *pVarResult = vaResult;

    return TRUE;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: