VC调用JS传参问题
以下是在VC中调用JS函数的一段代码,现在返回值正常,调用正常,就是在传入参数的时候有点问题,我如果调用JS自身的函数,参数正常,如:ExecJavascript("alert",pArrayList,strRet);
但是如果是我自己写的函数就有问题:
ExecJavascript("ShowMessage",pArrayList,strRet);
请各位多指点!
JS函数定义如下:
function ShowMessage(msg){ alert(msg); return 'bbbbbbb'+' '+msg;}</script>
/************************************************************************/
/* */
/************************************************************************/
void CDHtmlDialogEx::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
VARIANT vStr;
vStr.vt = VT_BSTR;
vStr.bstrVal = L"aaaa";
CArray <VARIANT,VARIANT&> pArrayList;
pArrayList.Add(vStr);
CString strRet = "";
ExecJavascript("ShowMessage",pArrayList,strRet);
}
/************************************************************************/
/* */
/************************************************************************/
HRESULT CDHtmlDialogEx::ExecJavascript(CString strFunName,const CArray <VARIANT,VARIANT&> ¶mList,CString &strRet)
{
//前提是你已经取得了IHTMLDocument2
//(1)Get Script
IHTMLDocument2* pDocument;
GetDHtmlDocument(&pDocument);
CComPtr <IDispatch > pScript;
HRESULT hResult;
hResult =pDocument->get_Script(&pScript);
if(FAILED(hResult))
{
return FALSE;
}
//(2)Get Javascript Function
CComBSTR pCComBSTR(strFunName);
DISPID pDISPID;
hResult = pScript->GetIDsOfNames(IID_NULL,&pCComBSTR,1,LOCALE_SYSTEM_DEFAULT,&pDISPID);
if(FAILED(hResult))
{
return FALSE;
}
//(3)Add Parameters
DISPPARAMS pDispParams;
memset(&pDispParams,0,sizeof(pDispParams));
int iParamCount = paramList.GetSize();
VARIANT* vParams = new VARIANT[iParamCount];
for(int i = 0;i < iParamCount; i++)
{
vParams[i] = paramList.GetAt(i);
}
//Params Count
pDispParams.cArgs = iParamCount;
//Params Array
pDispParams.rgvarg = vParams;
//Name Args Count
pDispParams.cNamedArgs = 0;
//(4)Invoke Javascript Method
EXCEPINFO pExcepInfo;
memset(&pExcepInfo,0,sizeof(pExcepInfo));
CComVariant pCComVariant;
//Initialize to invalid arg
UINT nintArgErr = (UINT)-1;
hResult = pScript->Invoke(pDISPID,IID_NULL,0,DISPATCH_METHOD,&pDispParams,&pCComVariant,&pExcepInfo,&nintArgErr);
delete[] pDispParams.rgvarg;
pScript.Release();
if (pCComVariant.vt == VT_BSTR)
{
CString strTemp = CString(pCComVariant.bstrVal);
AfxMessageBox(strTemp);
}
if(FAILED(hResult))
{
return FALSE;
}
return TRUE;
}