STDMETHODIMP CXXXX::CallScript(BSTR bstrFunc, IDispatch *pXMLArg)
{
HRESULT hResult = E_FAIL;
IDispatch *pDispScript = NULL;
IDispatch *pDispArg = NULL;
if (!m_pHtmlDoc)
{
return hResult;
}
hResult = m_pHtmlDoc->get_Script(&pDispScript);
//CComBSTR bstrHtml;
//IHTMLElement *pEle;
//pHtmlDoc->get_body(&pEle);
//pEle->get_outerHTML(&bstrHtml);
if (SUCCEEDED(hResult) && pDispScript)
{
DISPID dispid;
// LOCALE_USER_DEFAULT
hResult = pDispScript->GetIDsOfNames(IID_NULL, &bstrFunc, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (S_OK != hResult)
{
pDispScript->Release();
return hResult;
}
EXCEPINFO excepInfo;
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = 1;
dispparams.rgvarg = new VARIANT[1];
dispparams.cNamedArgs = 0;
dispparams.rgvarg[0].vt = VT_DISPATCH;
dispparams.rgvarg[0].pdispVal = pXMLArg;
VARIANT varResult;
UINT nArgErr = (UINT)-1; // initialize to invalid arg
hResult = pDispScript->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispparams, &varResult, &excepInfo, &nArgErr);
delete[] dispparams.rgvarg;
}
return hResult;
}
{
HRESULT hResult = E_FAIL;
IDispatch *pDispScript = NULL;
IDispatch *pDispArg = NULL;
if (!m_pHtmlDoc)
{
return hResult;
}
hResult = m_pHtmlDoc->get_Script(&pDispScript);
//CComBSTR bstrHtml;
//IHTMLElement *pEle;
//pHtmlDoc->get_body(&pEle);
//pEle->get_outerHTML(&bstrHtml);
if (SUCCEEDED(hResult) && pDispScript)
{
DISPID dispid;
// LOCALE_USER_DEFAULT
hResult = pDispScript->GetIDsOfNames(IID_NULL, &bstrFunc, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (S_OK != hResult)
{
pDispScript->Release();
return hResult;
}
EXCEPINFO excepInfo;
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = 1;
dispparams.rgvarg = new VARIANT[1];
dispparams.cNamedArgs = 0;
dispparams.rgvarg[0].vt = VT_DISPATCH;
dispparams.rgvarg[0].pdispVal = pXMLArg;
VARIANT varResult;
UINT nArgErr = (UINT)-1; // initialize to invalid arg
hResult = pDispScript->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispparams, &varResult, &excepInfo, &nArgErr);
delete[] dispparams.rgvarg;
}
return hResult;
}