VB向VC++的COM中传递数组的问题

来源:互联网  时间:2016/8/23 13:00:06

关于网友提出的“ 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类型了呢

上一篇关于MFC的一个小小问题
下一篇MFC CRecordset 类的一些问题 速度超慢
明星图片
相关文章
《 VB向VC++的COM中传递数组的问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)