您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> ---ActiveX控件调用JS函数---

---ActiveX控件调用JS函数---

来源:网络整理     时间:2016/8/29 16:46:55     关键词:

关于网友提出的“ ---ActiveX控件调用JS函数---”问题疑问,本网通过在网上对“ ---ActiveX控件调用JS函数---”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: ---ActiveX控件调用JS函数---
描述:

各位大虾,小弟用MFC做了一个ActiveX控件,控件嵌入到JSP页面里使用。
在控件里调用JS函数,但是现在问题是只能调用没有参数的JS函数。
请问怎么样可以调用带参数的JS函数,让ActiveX把参数传递给JS?
请各位大侠不吝赐教,不胜感激!


解决方案1:

  //向js发送信息   
  LRESULT   CFXVTDoc::outputParam(CString   fuctionName,const   CArray   ¶ms)   
  {   
  extern   IDispatch   *pScript;   
  if(pScript==NULL){   
  return   -1;   
  }   
  CComBSTR   bstrMember(fuctionName);   
    
  DISPID   dispid;   
    
  HRESULT   hr=pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);   
  if(FAILED(hr)){   
  #ifdef   _DEBUG   
  switch(hr)   
  {   
  case   E_OUTOFMEMORY:   
  MessageBox(NULL,"E_OUTOFMEMORY","outputParam   Err",0);   
  break;   
  case   DISP_E_UNKNOWNNAME:   
  MessageBox(NULL,"DISP_E_UNKNOWNNAME","outputParam   Err",0);   
  break;   
  case   DISP_E_UNKNOWNLCID:   
  MessageBox(NULL,"DISP_E_UNKNOWNLCID","outputParam   Err",0);   
  break;   
  }   
  #endif   
  return   -1;   
  }   
    
  DISPPARAMS   dispparams;   
  memset(&dispparams,   0,   sizeof   dispparams);   
    
  int   paramNum=params.GetCount();   
  VARIANT   *pParams=new   VARIANT[paramNum];   
    
  for(   int   i   =   0;   i<>
  {   
  CComBSTR   bstr   =params.GetAt(i);   //   back   reading   
  bstr.CopyTo(&pParams[i].bstrVal);   
  pParams[i].vt   =   VT_BSTR;   
  }     
    
  dispparams.rgvarg   =   pParams;       
  dispparams.cNamedArgs   =   0;   
  dispparams.cArgs=paramNum;   
    
  EXCEPINFO   excepInfo;   
  memset(&excepInfo,   0,   sizeof   excepInfo);   
  CComVariant   vaResult;   
  UINT   nArgErr   =   (UINT)-1;     //   initialize   to   invalid   arg   
  hr   =   pScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);   
  delete   []dispparams.rgvarg;   
  return   1;   
  }
解决方案2:

1.获取js函数接口
  可以在COM组件中定义一个属性用于获取js函数接口. 
.IDL
  IXXInterface:IDispatch{
   [propput, id(4), helpstring("property funDispatch")] HRESULT funDispatch([in] IDispatch* newVal);
 }
.h
   CComPtr m_pDispatch;
.cpp
   STDMETHODIMP CXXX::put_funDispatch(IDispatch* newVal)
   {
m_pDispatch = newVal;
   }
调用js函数
   .cpp
   HRESULT CXXX::FireJsFunctionk(){
        CComVariant varResult;
        //在这里封装要想传递的参数
CComVariant avarParams[2];
avarParams[0].lVal = 1;   //参数1 
     avarParams[0].vt = VT_UI4; 
        VARIANT Data;
//对Data赋值
     avarParams[1] = Data;        //参数2
DISPPARAMS params = {avarParams, NULL, 2, 0 };
HRESULT hr = 0;
if(m_pDispatch )
         hr = m_pDispatch->Invoke(0,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_METHOD,
                ¶ms, &varResult, NULL, NULL);
return hr;
   }

解决方案3:

http://bbs.51cto.com/archiver/tid-419100.html


以上介绍了“ ---ActiveX控件调用JS函数---”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3663387.html

相关图片

相关文章