从串口接收了一串数据存放的var(VARIANT),想将其转换为CByteArray,用了两种方法都没行得通。大家知道的帮帮忙?解决思路

从串口接收了一串数据存放的var(VARIANT),想将其转换为CByteArray,用了两种方法都没行得通。大家知道的帮帮忙?
C/C++ code
CMscomm m_msComm;    //


C/C++ code

void CMyDlg::OnCommMscomm()
{
    // TODO: 在此处添加消息处理程序代码
    if ( m_msComm.get_CommEvent() == 2 )
    {
        int nLen = 0;
        nLen = m_msComm.get_InBufferCount();
        CByteArray byRcvd;
        VariantToByteArry( m_msComm.get_Input(), byRcvd, nLen);
    }
}


方法一
C/C++ code

/ VARIANT转换为BYTE数组
void CMyDlg::VariantToByteArry( VARIANT& var, CByteArray& byArr, int nLen )
{
    var.vt = VT_SAFEARRAY; 
    COleSafeArray SafeArray( var );   //构造SafeArray时对象出现异常
    SafeArray.GetByteArray( byArr );
    int count = byArr.GetCount();

}


方法二
C/C++ code

// VARIANT转换为BYTE数组
void CMyDlg::VariantToByteArry( VARIANT& var, CByteArray& byArr, int nLen )
{
    BYTE * pBy = ( BYTE * ) var.parray->pvData;
    for ( int i = 0; i < nLen; i ++ )
    {
        byArr.Add( *( pBy + i ) );  //读数据出现异常
    }
}



这是为什么呢?.......

------解决方案--------------------
if(var.vt == (VT_ARRAY|VT_UI1))
{
BYTE *pByte = NULL;

::SafeArrayAccessData(var.parray,(void **)&pByte);
memcpy(pBuff,pByte,sizeof(HEADER_USERADM));
::SafeArrayUnaccessData(var.parray);
}

------解决方案--------------------
COleSafeArray SafeArray;
SafeArray=var;
int count=SafeArray.GetOneDimSize(); //得到有效数据长度

for(int i=0;i<count;i++)
{
Byte rxdata;
SafeArray.GetElement(&i,rxdata);//转换为BYTE型数据
byArr.Add(rxdata) ;
}