调用函数代码和示例
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 首先 .h 文件中定义:
 
CComPtr<IHTMLWindow2> m_sphtmlWnd;
CComPtr<IHTMLDocument2> m_spHtmlDoc;
 
 
 
//方法1 可以取得返回值。。。。。
 
//调用方法示例:stringArray为传入参数列表,getSum为js函数,pVarResult 为返回值
 
/* CStringArray stringArray;
stringArray.RemoveAll();
stringArray.SetSize(5);
stringArray[0].Format(L"%d",m_poiStart.x);
stringArray[1].Format(L"%d",m_poiStart.y);
stringArray[2].Format(L"%d",m_poiEnd.x);
stringArray[3].Format(L"%d",m_poiEnd.y);
stringArray[4].Format(L"%d",a + 1);
CComVariant pVarResult = CallJScript(L"getSum", stringArray);*/
 
bool Cems_mysql_appView::GetJScript(CComPtr<IDispatch>& spDisp)
{
m_spHtmlDoc = (IHTMLDocument2*)(GetHtmlDocument());
if(m_spHtmlDoc == NULL)
{
return false;
}
HRESULT hr = m_spHtmlDoc->get_Script(&spDisp);
ATLASSERT(SUCCEEDED(hr));
return SUCCEEDED(hr);
}
 
CComVariant Cems_mysql_appView::CallJScript(const CString strFunc,const CStringArray& paramArray)
{
//Getting IDispatch for Java Script objects
CComPtr<IDispatch> spScript;
if(!GetJScript(spScript))
{
return false;
}
//Find dispid for given function in the object
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 arraySize = paramArray.GetSize();
//Putting parameters
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = arraySize;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
dispparams.cNamedArgs = 0;
 
for( int i = 0; i < arraySize; i++)
{
CComBSTR bstr = paramArray.GetAt(arraySize - 1 - i);
// back reading
bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);
dispparams.rgvarg[i].vt = VT_BSTR;
}
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
CComVariant vaResult;
UINT nArgErr = (UINT)-1; // initialize to invalid arg
//Call JavaScript function
hr = spScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
delete [] dispparams.rgvarg;
if(FAILED(hr))
{
return false;
}
return vaResult;
}
 
 
 
//方法2
 
/*调用方法,不必多说。
 
CString str;
str.Format(L"getSum(%d,%d,%d,%d,%d)",m_poiStart.x,m_poiStart.y,m_poiEnd.x,m_poiEnd.y,a+1);
ExecScript(str);
 
*/
HRESULT Cems_mysql_appView::ExecScript(CString strjs)
{
HRESULT hr;
m_spHtmlDoc = (IHTMLDocument2*)(GetHtmlDocument());
if(m_sphtmlWnd == NULL)
{
hr = m_spHtmlDoc->get_parentWindow(&m_sphtmlWnd);//获取脚本指针
}
CComBSTR bstrjs = strjs.AllocSysString();
CComBSTR bstrlan = SysAllocString(L"javascript");
VARIANT varRet;
hr = m_sphtmlWnd->execScript(bstrjs, bstrlan, &varRet);
//m_sphtmlWnd = NULL;
return 1;
}
 

最新文章

  1. getopt,getoptlong学习
  2. 学习SQLite之路(二)
  3. 数据库知识整理&lt;五&gt;
  4. 2014中国软件开发者调查(二):Java、.NET、Web、云计算特点
  5. 修饰者模式(装饰者模式,Decoration)
  6. Web.Config文件中使用configSource
  7. ui与ux的区别
  8. thinkPHP模板的输出和模型的使用
  9. 升级 Java 编程规范的6个约定
  10. 阿里云linux的nginx下面配置多站点
  11. Poj2761-Feed the dogs(伸展树求名次)
  12. ecosphere是什么意思_ecosphere的翻译_音标_读音_用法_例句 - 必应 Bing 词典
  13. 《转》MFC网络编程学习
  14. Nginx的负载均衡
  15. pwntools简介
  16. Java全栈程序员之04:Ubuntu下安装MySQL、注册服务及Navcat
  17. iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)
  18. chromedriver 全屏 翻页 错误
  19. python-day76--django-中间件
  20. Java并发编程的艺术(四)——线程的状态

热门文章

  1. Loop Sql
  2. 机器学习改善Interpretability的几个技术
  3. WordPress .gitignore
  4. 使用EditPlus批量修改文件编码格式
  5. sublime快捷键汇总
  6. Java——单例模式初步
  7. thinkphp 静态缓存
  8. bzoj1045题解
  9. 线性基算贡献——19牛客多校第一场H
  10. HAOI 2006 受欢迎的牛 (洛谷2341)