能否用字符串来实现?此二进制数据是一个结构来的

解决方案 »

  1.   

    JS代码:
    var arArray = new Array("1","sadf","2","asdff","test");
    if( document.ObjectId) document.ObjectId.putVariant(arArray);VC代码, 接口实现:STDMETHODIMP CXXXX::putVariant(VARIANT varArray)
    {
    HRESULT hr = S_OK;VARTYPE vt = varArray.vt;
    if( vt == VT_DISPATCH )
    {
    //deal with javascript array
      CComVariant varValue;
      IDispatch* pDisp = varArray.pdispVal;
      //获取JS字符数组  int nLen = 5;  for( int i=0; i<nLen; i++ )
      {
       int nret = getValueOfIDs(pDisp,i,&varValue);
       if( nret ){
          varValue.ChangeType(VT_BSTR);
          CComBSTR bstrShowVal = varValue.bstrVal;
       }  }}
    else
    {
    //deal with vbscript array
    }
    return S_OK;
    }// 通过js的数组传进来的IDispatch,根据js数组下标来获取数组元数
    int CXXXX::getValueOfIDs(IDispatch* pDisp, int i, VARIANT *varValue)
    {
     if( pDisp != NULL && i >= 0 )
     {
      CComVariant varName(i,VT_I4);
      varName.ChangeType(VT_BSTR);
      DISPID dispId;  
      HRESULT hr = pDisp ->GetIDsOfNames(IID_NULL,&varName.bstrVal,1,LOCALE_USER_DEFAULT,&dispId);
      if( FAILED(hr) ) return 0;
      DISPPARAMS noArgs = { NULL, NULL, 0, 0 };
      hr = pDisp ->Invoke( dispId,
        IID_NULL,
        LOCALE_SYSTEM_DEFAULT,
        DISPATCH_PROPERTYGET,
        &noArgs,
        varValue,
        NULL,
        NULL );
      if( SUCCEEDED(hr) ) return 1;
     }
     return 0;