我使用IHTMLWindow2::execScript方法执行若干多句Javascript脚本,
经常出非常诡异的错误,还请各路高人指点:假设有ABCDEFG七条固定的Javascript语句,每条语句都要使用IHTMLWindow2::execScript来在一个IE控件里执行,结果总会出现一到两条语句执行失败,错误码为“非法参数”-E_INVALIDARG。此错误的特点:七条语句都有一定几率出错。也就是说,这次运行是C、E出错,下次就有可能是A、F出错,但C、E正常执行。第三次则可能ACE都正确,只有F出错。当然,有时候也会全部七条语句都执行成功。由此我的判断是Javascript语句没错,IHTMLWindow2::execScript的用法也“应该”没错,但就不知道为什么功能不正常。请各位热心人及功力深厚者指点一二 :) 
感激不尽!PS:由IHTMLDOMDocument2::get_parentWindow(&pWindow);获得的IHTMLWindow2指针,用完后,到底需不需要Release() ?

解决方案 »

  1.   

    我用的代码:
    IHTMLWindow2 *pWindow=NULL;
    hr=m_pDoc->get_parentWindow(&pWindow);WCHAR *CONSTTYPES=L"javascript";
    BSTR bscode,bstype;
    bstype=CONSTTYPES;
    WCHAR bsstr[1024];//避免动态申请内存的开销
    bscode=bsstr;
    long j=lstrlen(strScript);
    MultiByteToWideChar(CP_ACP,0,strScript,j+1,bsstr,j+1);
    VARIANT v;
    VariantInit(&v);
    v.vt=VT_EMPTY;
    hr=pWindow->execScript(bscode,bstype,&v);//就是这里有时会出错,且hr会返回E_INVALIDARG
    VariantClear(&v);
    pWindow->Release();真是太诡异了!!即使是同一条Javascript语句,也会有时正确执行,有时出错,我快被它搞疯了!!!!
      

  2.   

    再补充一句,在Debug版下没有这个问题。
      

  3.   

    是用 CoMarshalInterThreadInterfaceInStream(__uuidof(...)... 那一族函数来传COM指针吗?
      

  4.   

    depends on the apartment and the thread.
      

  5.   

    奋战n个小时,终于解决了!!!是COM指针无法在多线程模式中正常传值和使用,使用CoMarshalInterThreadInterfaceInStream即可解决问题 :)