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;
}
{
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;
}
相关文章推荐
- VC与JavaScript交互(三) ———— CWebPage类调用javascript函数(给js函数传参,并取得返回值)
- VC与JavaScript交互(三) ———— JS调用C++
- VC与JavaScript交互(三) ———— JS调用C++
- VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)
- VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)
- VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)
- VC中程序调用Js自定义函数的注意事项
- VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)
- js调用vc++的函数
- 如何实现IE中JS和VC之间的互相调用
- VC与JavaScript交互(一) -- 调用JS函数
- 如何实现IE中JS和VC之间的互相调用
- VC调用IE控件里的JS ---by devinghou
- VC中程序调用Js自定义函数的注意事项
- VC与JavaScript交互(三) ———— JS调用C++
- VC与JavaScript交互(二) ———— 调用JS函数
- 如何实现IE中JS和VC之间的互相调用
- VC中程序调用Js自定义函数的注意事项
- VC与JavaScript交互(三) ———— JS调用C++
- VC与JavaScript交互(二) --- 调用JS函数