描述:
各位大虾,小弟用MFC做了一个ActiveX控件,控件嵌入到JSP页面里使用。
在控件里调用JS函数,但是现在问题是只能调用没有参数的JS函数。
请问怎么样可以调用带参数的JS函数,让ActiveX把参数传递给JS?
请各位大侠不吝赐教,不胜感激!
解决方案1:
//向js发送信息解决方案2:
LRESULT CFXVTDoc::outputParam(CString fuctionName,const CArray<CString> ¶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<paramNum; 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;
}
1.获取js函数接口
可以在COM组件中定义一个属性用于获取js函数接口.
.IDL
IXXInterface:IDispatch{
[propput, id(4), helpstring("property funDispatch")] HRESULT funDispatch([in] IDispatch* newVal);
}
.h
CComPtr<IDispatch> 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;
}
http://bbs.51cto.com/archiver/tid-419100.html