MSComm控件

zxc345232435346 2007-11-05 02:00:23
用MSComm控件做串口通信时 为什么总是接不到数据? onCOMM时间已经响应了,但是执行下面语句时就会死掉。
variant_inp =m_COMM.GetInput();
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度


这是我的代码 请指教~~

初始化串口://////////////////////////////////////////////////////
if(m_COMM.GetPortOpen()) //如果串口是打开的,则关闭串口
{
m_COMM.SetPortOpen(FALSE);
}
m_COMM.SetCommPort(comport); //comport=2
m_COMM.SetInBufferSize(1024); //接收缓冲区
m_COMM.SetOutBufferSize(1024);//发送缓冲区
m_COMM.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_COMM.SetInputMode(1);//以二进制方式读写数据
m_COMM.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_COMM.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位

if(!m_COMM.GetPortOpen()) //未打开串口
{
m_COMM.SetPortOpen(TRUE);//打开串口
}else
m_COMM.SetOutBufferCount(0);
/////////////////////////onCOMM 响应////////////////////////////////////
void CListTreeViewDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
switch(m_COMM.GetCommEvent())
{
case 1: // comEvSend发送数据
break;
case 2: // comEvReceive读取数据
// MessageBox(_T("读取数据事件"), _T("TRACE"), MB_OK);
variant_inp =m_COMM.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
//接受数据
for(k=0; k<len; k++)
{
safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
// recd+=strtemp;
}

// UpdateData(TRUE);
break;
default: // 传输事件出错
m_COMM.SetOutBufferCount(0);
break;
}
UpdateData(FALSE); //更新图象内容
}
...全文
57 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
COleSafeArray *safearray_inp = NULL;
safearray_inp = variant_inp.parray;

这样取值试一下呢?

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧