当前位置 博文首页 > 使用SAFEARRAY返回的代码

    使用SAFEARRAY返回的代码

    作者:admin 时间:2021-02-19 06:43

    前天碰到有人问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

    js
下一篇:没有了