CSDN=>FAQ=>FAQ 展示
  • 问题内容:求助!JS数组传入com组件后如何获取?(找了好久还是没找到答案!)
  • 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5179843
  • 所属论坛:ATL/ActiveX/COM     审核组:VC/MFC
  • 提问者:hqulyc     解决者:superarhow
  • 感谢:wylcy
  • 关键字:VC/MFC 调用 元素 变量 ATL/ActiveX/COM 组件 array 进来 获取 传入 申明 索引
  • 答案:

    求助!JS数组传入com组件后如何获取?
    JS代码:
    var arArray = new Array("1","sadf","2","asdff","test");
    if( document.stepDemo) document.stepDemo.putVariant(arArray);

    接口定义:
    STDMETHODIMP CXXXXXX::putVariant(VARIANT varArray)
    {
    HRESULT hr = S_OK;
    int nLen = 5;
    VARTYPE vt = varArray.vt;
    if( vt == VT_DISPATCH )
    {
    //deal with javascript array
    VariantToBSTR(varArray ->pdispVal,nLen);
    }
    else
    {
    //deal with vbscript array
    }
    return S_OK;
    }
    解决如下:
    HRESULT CXXXXX::VariantToBSTR(IDispatch* disp, int nLen)
    {
     // DebugBreak();
     UINT nSize = 0;
     HRESULT hr = disp ->GetTypeInfo(GetTypeInfoCount(&nSize);
     DISPPARAMS noArgs = { NULL, NULL, 0, 0 };
     for( int i=0; i<nLen; i++ )
     {
    CComVariant varIndex(i,VT_I4);
    varIndex.ChangeType(VT_BSTR);
    DISPID dispId;
    hr = disp ->GetIDsOfNames(IID_NULL,&varIndex.bstrVal,1,LOCALE_USER_DEFAULT,&dispId);
    if( FAILED(hr) ) continue;
    CComVariant varResult;
    hr = disp->Invoke( dispId,
      IID_NULL,
      LOCALE_SYSTEM_DEFAULT,
      DISPATCH_PROPERTYGET,
      &noArgs,
      &varResult,
      NULL,
      NULL );
    VARTYPE vt = varResult.vt;
    hr = varResult.ChangeType( VT_BSTR );
    CComBSTR bstrVal = varResult.bstrVal;
     }  
     return S_OK;
    }

  • 评价: 有价值 给朵鲜花(2) 无价值 扔个鸡蛋(1)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo