关于串口中BuildCommDCB的问题,老是访问到系统地址而产生冲突

elitist21cn 2003-10-06 07:09:53
DCB *dCB;
HANDLE hCommDevice1=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(hCommDevice1==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"OpenComm error","info",MB_OK);
CloseHandle(hCommDevice1);
return 0;
}
else
{
BuildCommDCB("COM1: baud=9600 parity=N data=8
stop=1 ",dCB);
if (SetCommState(hCommDevice1,dCB)< 0)
{
MessageBox(NULL,"Read SETCommState
error","info",MB_OK);

CloseHandle(hCommDevice1);
return 0;
}
}
以上代码执行到BuileCommDCB的时候出错.不知道为什么?
...全文
150 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
duyhui 2003-10-17
  • 打赏
  • 举报
回复
BuildCommDCB("COM1: baud=9600 parity=N data=8 stop=1 ",&dCB);
AthlonxpX86 2003-10-07
  • 打赏
  • 举报
回复
问题在这里DCB *dCB;,因为这是个指针,因此并没有初始化一个DCB对象,即dCB指向一无效内存空间,因此BuildCommDCB要在你指定的DCB中填充数据就会造成内存访问错误,正确的写法应该如下
DCB dCB;
HANDLE hCommDevice1=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(hCommDevice1==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"OpenComm error","info",MB_OK);
CloseHandle(hCommDevice1);
return 0;
}
else
{
BuildCommDCB("COM1: baud=9600 parity=N data=8
stop=1 ",&dCB);
if (SetCommState(hCommDevice1,dCB)< 0)
{
MessageBox(NULL,"Read SETCommState
error","info",MB_OK);

CloseHandle(hCommDevice1);
return 0;
}
}

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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