javascript获取COM或ATL返回的数组(整型或字符串数组)VBArray相

来源:未知 责任编辑:责任编辑 发表时间:2013-12-01 14:20 点击:

 javascript获取COM或ATL返回的数组(整型或字符串数组)
    最近笔者工作中碰到一个问题就是在ATL返回的字符串数组,在js脚本中怎么都获取不到,于是去网上看看有没有解决方案,但是总体感觉很乱,当然也看到一个重要的信息,

感谢那位作者,当时发现一篇05的帖子也是该问题,没人解答,正好笔者有幸搞定,现抛砖引玉下,希望牛人提出意见

   首先,举例返回字符串数组的情况:

    ATL中实现如下:
    idl定义:[id(368), helpstring("method TestStringArr")] HRESULT TestStringArr([out,retval]VARIANT *pCode);

    .h定义:STDMETHOD(TestStringArr)(VARIANT *pCode); 

   .cpp实现:

STDMETHODIMP CNsoControl::TestStringArr(VARIANT *pCode)
{

    SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].cElements =3;
    rgsabound[0].lLbound = 0;
    psa = SafeArrayCreate(VT_VARIANT,1,rgsabound);//我这里原来没用VT_VARIANT,而是用了VT_BSTR类型,结果会导致JS代码中new VBArray出错,请一定注意
    long idx;
    VARIANT setdt;
    setdt.vt = VT_BSTR;

    //赋值
    idx = 0;
    setdt.bstrVal = L"a";
    SafeArrayPutElement(psa,&idx,&setdt);
    idx = 1;
    setdt.bstrVal = L"b";
    SafeArrayPutElement(psa,&idx,&setdt);
        //赋值
    idx = 2;
    setdt.bstrVal = L"c";
    SafeArrayPutElement(psa,&idx,&setdt);

    (*pCode).vt = VT_ARRAY|VT_VARIANT;//我这里原来没用VT_VARIANT,而是用了VT_BSTR类型,结果会导致JS代码中new VBArray出错,请一定注意
    (*pCode).parray = psa;
    return S_OK;
}


同理对于返回整型数组的情况如下:

STDMETHODIMP CNsoControl::TestStringArr(VARIANT *pCode)
{

     SAFEARRAY FAR* psa;
  //数组维数
  SAFEARRAYBOUND rgsabound[1];

  rgsabound[0].lLbound = 0;
  rgsabound[0].cElements = 2;
  psa=SafeArrayCreate(VT_VARIANT,1,rgsabound);//我这里原来没用VT_VARIANT,而是用了VT_I4类型,结果会导致JS代码中new VBArray出错,请一定注意

  long idx;
  VARIANT setdt;
  setdt.vt = VT_I4;

  //赋值
  idx = 0;
  setdt.lVal = 1;
  SafeArrayPutElement(psa,&idx,&setdt);
  idx = 1;
  setdt.lVal = 2;
  SafeArrayPutElement(psa,&idx,&setdt);

  //返回安全数组
  V_VT(pVal) = VT_ARRAY | VT_VARIANT;//我这里原来没用VT_VARIANT,而是用了VT_I4类型,结果会导致JS代码中new VBArray出错,请一定注意
  V_ARRAY(pVal) = psa;

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 用js检测两个线段是否相交
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 我是如何去了解jquery的(六),案例之幻灯片轮换
  • Jquery封装幻灯片效果
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1