vb调用 vc编写activex控件,传入字符数组有关问题

vb调用 vc编写activex控件,传入字符数组问题
遇到一下问题, VB代码如下:
VB code
Private Sub test12_Click()
    Dim szName As String
    Dim iRet As Integer
    Dim MyVar As Variant
    ReDim MyVar(0 To 7) As Byte
            
    MyVar(0) = &HA0
    MyVar(1) = &H0
    MyVar(2) = &H0
    MyVar(3) = &H2
    MyVar(4) = &H41
    MyVar(5) = &H0
    MyVar(6) = &H0
    MyVar(7) = &H0
    
    'szName = "A0 00 00 02 41 00 00 00"
    'MyArr = VarPtr(HexStr2Byte(szName))
    iRet = ICBCControl1.SelectbyName(MyVar)   //-->调用OCX方法 
    
    MsgBox (iRet)
End Sub


VC中方法实现:
C/C++ code

short CICBCControlCtrl::SelectbyName(const VARIANT FAR& ID)  // <--
{
    // TODO: Add your dispatch handler code here
    
    BYTE abyID[MAXTMP];
    short cbID = MAXTMP;
    if ( !VARIANTToBinary(ID, abyID, cbID) )    //--> 调用,实现如下
        return _ERR_TCHANGE_IN;
//.......
}

//将 variant中safearray 转换为数组。
BOOL VARIANTToBinary(VARIANT InArray, BYTE* pbuf, short& len)  //<-- 实现
{
    if ( (VT_BYREF | VT_UI1) != InArray.vt  )   //每次在该处断掉,断点InArray.vt 为 VT_VARIANT|VT_BYREF
        return FALSE;
    if ( 1 != InArray.parray->cDims )
        return FALSE;
    
    //ATLASSERT( VT_UI1 == InputArray.parray->)
    BYTE *pValue = NULL;
    SafeArrayAccessData(InArray.parray,(void**)&pValue);
    if ( pValue == NULL)
        return FALSE;
    int count = InArray.parray->rgsabound[0].cElements;
    memcpy(pbuf, pValue, count);
    len = count;
    SafeArrayUnaccessData(InArray.parray);
    return TRUE;
}




求解各位大大这样传递是否正确, 如果不正确改如何传递数组?
或者有好的方法传递字节数组?

------解决方案--------------------
SAFEARRAY()
------解决方案--------------------
应该是
SAFEARRAY() 

忘了怎么用了
------解决方案--------------------
如果传字符数组的话,可以直接用BSTR

http://zh.wikipedia.org/wiki/BSTR.
------解决方案--------------------
探讨

引用:
SAFEARRAY()

谢谢,不太理解SAFEARRAY()。
但是,MFC ACTIVE CONTROLWIZARD 不会自动产生参数类型SAFEARRAY,所以我用到了VARIANT。
请看VC 编写的 ocx 方法中的参数:
. short CICBCControlCtrl::SelectbyName(const VARIANT ……