串口问题,请帮忙
我用Mscomm控件来发送和接收字符串,它要求发送或接收的数据是variant型的数据发送还好说,就是接收回来的数据出了问题,下面是我接收部分的程序
void CCharTerminalDlg::OnCommMscomm()
{
VARIANT vResponse;
char *str;
char *str1;
int k, nEvent, i;
nEvent = m_Com.GetCommEvent();
switch(nEvent)
{
case 2: //收到大于RTHresshold个字符
k = m_Com.GetInBufferCount(); //接收到的字符数目
if(k > 0)
{
vResponse=m_Com.GetInput(); //read
//对数据进行其他处理
str = (char*)(unsigned char*) vResponse.parray->pvData;
}
// 接收到字符,MSComm控件发送事件
i = 0;
str1 = str;
while (i < k)
{
i++;
str1++;
}
*str1 = '\0';
m_strReceive = (const char *)str;
//清除字符串中的不必要字符
break;
case 3: //CTS线状态发生了变化
break;
}
UpdateData(FALSE);
m_nEdit.Invalidate();
}
这段程序是一个范例中的一部分,运行的很好,我把它移植到我的程序中就出现了一些问题,调试范例的时候,(比如说收到字符串123)vResponse的值为:{???},把它的字符串部分传给str后str的值为:0x00158818“123”,运行正常;
但是调试我的程序时,vResponse的值为{"123" VT_BSTR},str:0x00000000“”,最后没有显示;
我试了很多方法,基本可以确定试variant数据的问题,有书上说“variant数据可以用BSTR表示字符串,但是不是所有的BSTR都含有宽字符”,我想问题可能在这里,请高手帮忙。
问题点数:20、回复次数:2Top
1 楼zxyjyzxyjy(猜)回复于 2005-09-20 11:05:30 得分 10
反回的是Variant类型的数据,可以调用VariantChangeType或VariantChangeTypeEx来进行处理。Top
2 楼zxyjyzxyjy(猜)回复于 2005-09-21 08:28:04 得分 10
不管它是不是宽字符,可用CString str=variant.bstrVal。CString类的赋值操作符进行了处理。Top




