您好,请问为什么BSTR*类型的传出参数,在javascript中无法用var 变量获得?但是在VB中可以用String变量获得?谢谢。

解决方案 »

  1.   

    vs2008提供的js版本提供了强类型变量定义,这种情况下能用,早期版本只有弱类型,要适应早期版本,考虑把BSTR*改成VARIANT*
      

  2.   

    回复:jameshooo
     我试了VARIANT* ,用VB的VARIANT类型也可以获得,但是用javascript的var就是不行,谢谢!
      

  3.   

    回复:jameshooo
    javascript:
    var comObj=new ActiveXObject("ComXX.XX");
    var strSn;
    document.getElementById("Text1").value=comObj.GetXX(strSn);
    alert(strSn);//undefineCOM:
    接口: [id(5), helpstring("...")]
     HRESULT GetXX([out] VARIANT* strSn,[out,retval] LONG* nReturnValue);
    STDMETHODIMP CXX::GetXX(VARIANT* strSn,LONG* nReturnValue)
    {
    int rv=0;
    char *pchSnA=NULL;
    int snLen=0;

    strSn->vt=VT_BSTR;
    strSn->bstrVal=NULL;
    .......
    strSn->bstrVal=SysAllocString(CA2W(pchSnA).m_psz);
    *nReturnValue=NETCA_COMKEYHANDLE_OK;
    free(pchSnA);
    return S_OK;
    }
    谢谢!
      

  4.   

    element.value = comObj.GetXX(strSn);
    这个语句的GetXX返回值是LONG,也就是说把这个LONG值赋值给value属性了。单步跟踪一下GetXX方法。其实参数使用BSTR*在js中也应该是可以使用的,不知道组件的IDispatch::Invoke是如何实现的
      

  5.   

    我知道 element.value = comObj.GetXX(strSn)是获得返回值,否则我就不用返回了,我是说
    alert(strSn);输出为undefine,这和VB相差很大 ,谢谢!
      

  6.   

    就是因为comObj.GetXX调用失败了,没有对strSn赋值,你应该跟踪。