在COM方法中用VARIANT类型传递数组数据

在COM方法中可用VARIANT类型传递数组数据,在VC++中用SAFEARRAY处理。下面给出输入和输出数组的例子

    1。输入数组到COM中
    STDMETHODIMP     CTestCom1::vb2vc(VARIANT     buffer)
    {  
            long     dim=SafeArrayGetDim(buffer.parray);
            long     ubound;
            long     lbound;

            SafeArrayGetUBound(buffer.parray,dim,&ubound);
            SafeArrayGetLBound(buffer.parray,dim,&lbound);
            BSTR*     buf;
            BSTR     pd[2];
            SafeArrayAccessData(buffer.parray,(void**)&buf);
            for     (int     i=lbound;i <ubound;i++)
                pd[i]=buf[i];
            }
            return     S_OK;
    }


    buffer为一维数组,存放字符串,在vb中的代码为
                Dim     oo     As     ARRAYTESTLib.TestCom1
                Set     oo     =     New     ARRAYTESTLib.TestCom1
                Dim     buf(2)     As     String
                buf(0)     =     "65 "
                buf(1)     =     "anss "
                oo.vb2vc     buf
   
    2。COM返回数组数据到vb

    STDMETHODIMP     CTestCom1::retarray(VARIANT     *buffer)
    {
    //返回数组
    SAFEARRAY     FAR*     psa;
    SAFEARRAYBOUND     rgsabound[1];
    rgsabound[0].lLbound=0;
    rgsabound[0].cElements=2;
    psa=SafeArrayCreate(VT_I4,1,rgsabound);

    long     idx;
    long     setdt;

    idx=0;
    setdt=12;

    SafeArrayPutElement(psa,&idx,&setdt);
    idx=1;
    setdt=342;
    SafeArrayPutElement(psa,&idx,&setdt);

    V_VT(buffer)     =     VT_ARRAY     |     VT_I4;
    V_ARRAY(buffer)=psa;


    return     S_OK;
    }


    vb中的代码为:
                Dim     oo     As     ARRAYTESTLib.TestCom1
                Set     oo     =     New     ARRAYTESTLib.TestCom1
                Dim     rarr     As     Variant
                oo.retarray     rarr
                MsgBox     rarr(0)     &     rarr(1)    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值