2012年8月22日 星期三

CHtmlDialog invoke javascript in HTML


CComPtr<IHTMLDocument2> spDoc;
GetDHtmlDocument(&spDoc);
CComPtr<IDispatch> spDisp(NULL);

if(spDoc)
{
spDoc->get_Script(&spDisp);
}


CComBSTR bstrMember(csFunctionName);
DISPID dispid = NULL;
HRESULT hr = spDisp->GetIDsOfNames(IID_NULL,
  &bstrMember,
  1,
  LOCALE_SYSTEM_DEFAULT,
  &dispid);
if(FAILED(hr))
{
//ShowError(GetSystemErrorMessage(hr));
return ;
}

CStringArray csParamArray;
csParamArray.Add(csParam1);
csParamArray.Add(csParam2);
const int arraySize = csParamArray.GetSize();

DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = arraySize;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];


for( int i = 0; i < arraySize; i++)
{
CComBSTR bstr = csParamArray.GetAt(arraySize - 1 - i); // back reading
bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);
dispparams.rgvarg[i].vt = VT_BSTR;
}
dispparams.cNamedArgs = 0;

EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
    CComVariant vaResult;
UINT nArgErr = (UINT)-1;  // initialize to invalid arg
       
hr = spDisp->Invoke(dispid,IID_NULL,0,
DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);

delete [] dispparams.rgvarg;