VC调用JS
来源:互联网 发布:淘宝退款和售后规则 编辑:程序博客网 时间:2024/05/29 09:00
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;
}
- Acrobat vc 调用 js
- VC调用JS
- js调用vc++的函数
- VC中程序调用Js自定义函数的注意事项
- VC中程序调用Js自定义函数的注意事项
- 【CEF】 VC应用程序让JS代码能够调用C++方法
- VC与JavaScript交互(一) -- 调用JS函数
- VC中程序调用Js自定义函数的注意事项
- VC与JavaScript交互(二) --- 调用JS函数
- [VC++] MySQL VC++ 调用方法
- 如何实现IE中JS和VC之间的互相调用
- VC与JavaScript交互(二) ———— 调用JS函数
- VC与JavaScript交互(二) ———— 调用JS函数
- 如何实现IE中JS和VC之间的互相调用
- VC与JavaScript交互(三) ———— JS调用C++
- VC与JavaScript交互(二) ———— 调用JS函数
- VC与JavaScript交互(三) ———— JS调用C++
- VC与JavaScript交互(二) ———— 调用JS函数
- memory leak & double free如何排查?
- 基本的SqlPlus命令
- oracle 优化规则(1)
- mysql DB C#封装
- Hacker News与Reddit的算法比较
- VC调用JS
- 如何在Android中实现程序前后台切换效果
- oracle 优化规则(2)
- 将ALV上修改的内容保存到内表(FM方法)
- 2013-02-26
- oracle 优化规则(3)
- IOS 字符串操作
- oracle 优化规则(4)
- 简单的xml读取