关于VC调用VB的用法,如何得到VB组件中的Variant,总是过不去,在线等待,来者送分 
如下VB组件:
Public Function OutpHand() As Variant
    Dim mpArray As Variant
    ReDim mpArray(1 To 2)
    '给返回数组赋值
    mpArray(1) = "001"
    mpArray(2) = "002"
   OutpHand = mpArray
end function下面VC组件调用,只写出代码,整个组件结构太长了。如下
hr  = pOutp.CreateInstance(__uuidof(OutpHand )); //创建调VB的对象
_variant_t varRetRcptNO;    //返回收据数组
VariantInit(&varRetRcptNO);
//调用VB的商业层
varRetRcptNO = pOutp->OutpHand(); 
//判断数组是否为空
if(varRetRcptNO.vt != (VT_ARRAY|VT_VARIANT|VT_BYREF))
{
   err=SysAllocString(L"收据返回值应为Variant数组");
   throw 0L;
}
在上面它就 执行到 err=SysAllocString(L"收据返回值应为Variant数组");
跟踪varRetRcptNO.vt=8204为何么这不是数组呢?
注:
VT_ARRAY = 8192
VT_VARIANT = 12
VT_BYREF 16384
谢谢各位,可以再加分的,在线等待!!

解决方案 »

  1.   


    //调用VB的商业层
    前加上
    varRetRcptNO = VT_ARRAY|VT_VARIANT|VT_BYREF
    加上了也不行
      

  2.   

    返回值直接存储在varRetRcptNO里面的吧
    你判断的时候直接这样判断
    if(varRetRcptNO.vt != (VT_ARRAY|VT_VARIANT))
    {
    ...
    }---------
      ++C++
    ---------
      

  3.   

    to
     FlyYang(++X++) 
    这也是你这样判断的呀,只是又多加了一个 VT_BYREF  
    但返回结果不是这几种值中的任何一个
      

  4.   

    8204是VT_VARIANT|VT_ARRAY。
    我是用mfc包装类测试的COutpHand oh;
    oh.CreateDispatch("VVV1.OutpHand");
    COleVariant v(oh.OutpHand());ASSERT(v.vt == (VT_VARIANT|VT_ARRAY));SAFEARRAY *psa = v.parray;
    long lLBound, lUBound;
    SafeArrayGetLBound(psa, 1, &lLBound);
    SafeArrayGetUBound(psa, 1, &lUBound);for(long i = lLBound; i <= lUBound; i++)
    {
    COleVariant v;
    SafeArrayGetElement(psa, &i, &v);
    AfxMessageBox(CString(v.bstrVal));
    }
      

  5.   

    to
    : bcpl(我是宇宙中的一粒沙子) 
    太谢谢你了
    可以了,完全正确太谢谢你了我试了五天了,一直没做出来,太谢谢你了