关于网友提出的“ VB向VC++的COM中传递数组的问题”问题疑问,本网通过在网上对“ VB向VC++的COM中传递数组的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: VB向VC++的COM中传递数组的问题描述:
本帖最后由 cqruan 于 2012-02-03 12:32:56 编辑
//VB向COM传递数组//这段代码的意思是,传进来的数组元素是BSTR类型的,得到每个元素,组成一个新的BSTR串,在返回给SetArr方法
STDMETHODIMP CArr::SetArr(VARIANT *pIn, VARIANT *pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
SAFEARRAY *psa=*(pIn->pparray);//获取从外部传递进来的数组,要用pparray,区别在于此
CComBSTR tmp;
long lBound,uBound;
SafeArrayGetLBound(psa,1,&lBound);
SafeArrayGetUBound(psa,1,&uBound);
for(long i=lBound;i<=uBound;i++)
{
VARIANT var;
SafeArrayGetElement(psa,&i,&var);
if(tmp.Length()==0)tmp.AppendBSTR(var.bstrVal);
else
{
tmp.AppendBSTR(SysAllocString(L","));
tmp.AppendBSTR(var.bstrVal);
}
}
pRet->vt=VT_BSTR;
pRet->bstrVal=tmp.Copy();
return S_OK;
}
在ASP中调用没有问题:
<%
'向COM中传递数组
dim newArr(6)
newArr(0)="1111111"
newArr(1)="2222222"
newArr(2)="3333333"
newArr(3)="4444444"
newArr(4)="5555555"
newArr(5)="6666666"
newArr(6)="7777777"
str=obj.setArr(newArr)
response.write str
%>
可在VB中死活不行:
Private Sub Command1_Click()
Set obj = CreateObject("TestVar.Arr")
Dim arr(0 To 3) As String
arr(0) = CStr("aaa")
arr(1) = CStr("bbb")
arr(2) = CStr("ccc")
Dim var As Variant
'var = obj.SetArr(arr)
'var = obj.SetArr(VarPtr(arr(0)))
var = obj.SetArr(arr(0))
MsgBox CStr(var)
End Sub
是我哪里弄错了呢?
非常感谢
解决方案1:
VB中SetArr 参数引用的不对,怎么成了String类型了呢