欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用SAFEARRAY返回的代码

程序员文章站 2022-03-20 14:00:03
前天碰到有人问safearray的问题,我正好对vb script里面如何得到com组件返回的数组感兴趣,就试验了一下。 ide用的是vc7.1 开始都差不多,建...
前天碰到有人问safearray的问题,我正好对vb script里面如何得到com组件返回的数组感兴趣,就试验了一下。

ide用的是vc7.1

开始都差不多,建立工程,建立com对象,建立方法:

接口定义:

[id(2), helpstring("method getarray")] hresult getarray1([out,retval] variant* v);

方法实现:
stdmethodimp catl3::getarray1(variant * pvavariant)
{
    std::vector< float> vct;
    vct.push_back(   11.4 );
    vct.push_back(   12.4 );
    vct.push_back(   14.4 );
    ccomsafearray<variant> samatrix;
    for ( int i = 0 ; i < vct.size(); ++i )
    {
        samatrix.add( ccomvariant(vct[i]));
    }
    variantinit(pvavariant);
    ccomvariant var( samatrix );
    var.detach( pvavariant );
    return s_ok;
}

注意的一点就是:vbs或其它脚本环境中要得到返回数组参数,数组中的类型是variant类型。

vbs测试脚本
dim v4

cnxn4.add 1, 2 

v4 = cnxn4.getarray1()

dim x

for x = lbound(v4) to ubound( v4 )
 msgbox v4(x)
next