如何在MFC中传递一个VARIANT数组给vbscript函数

fish_kun 2007-06-08 11:05:26
我在MFC中有一个VARIANT数组,它大小不定,类型也不定,可能是包含long型的VARIANT,也可能是包含字符串的VARIANT.在MFC中,它是一个VARIANT数组,请问各位,我如何将这个数组传递给vbscript呢?
...全文
569 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjdev 2007-06-18
  • 打赏
  • 举报
回复
我复制过来的东西,到你这里又能贴一次:


[问题提出]
ATL做com,想让一方法返回一数组,我这样声明:……[out,retval]SAFEARRAY** par)出错,为什么?最好能给一简单例子
[解决方法]
在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)
fish_kun 2007-06-10
  • 打赏
  • 举报
回复
就是,也按VARIANT类型接受.
CathySun118 2007-06-09
  • 打赏
  • 举报
回复
也用VARIANT类型接收阿
xdlous 2007-06-09
  • 打赏
  • 举报
回复
看到好多星,
俺就不说了
masterz 2007-06-09
  • 打赏
  • 举报
回复
反了,这个更合适
http://www.geocities.com/Jeff_Louie/safearray.html
Using and Returning SafeArrays
masterz 2007-06-09
  • 打赏
  • 举报
回复
看看这个
http://onegazhang.spaces.live.com/blog/cns!D5E642BC862BA286!213.entry
pass 2-dimension string array from vbscript to COM
wishfly 2007-06-09
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
看看SAFEARRAY 类型

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧