如何在MFC中传递一个VARIANT数组给vbscript函数 我在MFC中有一个VARIANT数组,它大小不定,类型也不定,可能是包含long型的VARIANT,也可能是包含字符串的VARIANT.在MFC中,它是一个VARIANT数组,请问各位,我如何将这个数组传递给vbscript呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看这个http://onegazhang.spaces.live.com/blog/cns!D5E642BC862BA286!213.entrypass 2-dimension string array from vbscript to COM 反了,这个更合适http://www.geocities.com/Jeff_Louie/safearray.htmlUsing and Returning SafeArrays 我复制过来的东西,到你这里又能贴一次: [问题提出] 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) vs2008(2005),怎么定位抛出异常位置 DIB中的位图数据块存储的是什么值,是每个点的颜色值吗?? 怎么清除combobox里面的所有内容? 急求com技术内幕配套源代码! UpdateData()有什么作用呢? 高分征求解决方案 100简单的问题 IDispatch.Invoke调用问题。。。。。 Virtual 的問題 初学者:可以介绍以下SDK吗? 怎样在线程里更新对话框中数据的显示?? 请问各位高手,如何在网页客户端判断ActiveX控件是否已经安装啊??(解决给分)
http://onegazhang.spaces.live.com/blog/cns!D5E642BC862BA286!213.entry
pass 2-dimension string array from vbscript to COM
http://www.geocities.com/Jeff_Louie/safearray.html
Using and Returning SafeArrays
[问题提出]
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)