使用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
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