VB向VC++的COM中传递数组的有关问题
VB向VC++的COM中传递数组的问题
//VB向COM传递数组
//这段代码的意思是,传进来的数组元素是BSTR类型的,得到每个元素,组成一个新的BSTR串,在返回给SetArr方法
在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中死活不行:
是我哪里弄错了呢?
非常感谢
------解决方案--------------------
VB中SetArr 参数引用的不对,怎么成了String类型了呢
//VB向COM传递数组
//这段代码的意思是,传进来的数组元素是BSTR类型的,得到每个元素,组成一个新的BSTR串,在返回给SetArr方法
- C/C++ code
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中死活不行:
- VB code
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
是我哪里弄错了呢?
非常感谢
------解决方案--------------------
VB中SetArr 参数引用的不对,怎么成了String类型了呢