CMscomm m_msComm; //
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);
}
}方法一/ 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();}方法二// 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 ) ); //读数据出现异常
}
}
这是为什么呢?.......
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);
}
}方法一/ 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();}方法二// 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 ) ); //读数据出现异常
}
}
这是为什么呢?.......
{
BYTE *pByte = NULL;
::SafeArrayAccessData(var.parray,(void **)&pByte);
memcpy(pBuff,pByte,sizeof(HEADER_USERADM));
::SafeArrayUnaccessData(var.parray);
}
pBuff从哪来的,干啥的?
SafeArray=var;
int count=SafeArray.GetOneDimSize(); //得到有效数据长度for(int i=0;i<count;i++)
{
Byte rxdata;
SafeArray.GetElement(&i,rxdata);//转换为BYTE型数据
byArr.Add(rxdata) ;
}
谢谢各位大哥。结合5楼的帮助,
再加上自己把InputMode设置为1,则接收的var中含有Byte数组型数据。
如果InputMode设置为0 变量含有String类型数据,
我想InputMode默认的值应该是0。