MSCOMM的问题?

TripH0101 2010-01-05 04:01:39
当MSCOMM正在读取数据时(即读端口时)或者发送数据时,关闭程序,就会报异常(access violation......),请问怎么解决这个问题?
...全文
189 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
TripH0101 2010-01-16
  • 打赏
  • 举报
回复
算了,结了
lovetsfuer 2010-01-14
  • 打赏
  • 举报
回复
换个串口控件试一试
我们也用串口软件,不是MSComm,还么出现什么问题
TripH0101 2010-01-13
  • 打赏
  • 举报
回复
有搞过的吗
USB_A_SB 2010-01-13
  • 打赏
  • 举报
回复
up
J明 2010-01-10
  • 打赏
  • 举报
回复
在OnComm事件加入讀寫事件的判斷試試看。
TripH0101 2010-01-07
  • 打赏
  • 举报
回复
请高手指教
TripH0101 2010-01-06
  • 打赏
  • 举报
回复
异常指向这个函数
AnsiString __fastcall TFMain::ReadPort()
{
//TODO: Add your source code here
OleVariant s;
//if(test->Terminated) return 0;
if(MSComm1->InBufferCount)
{
s=MSComm1->Input;
AnsiString str=s.AsType(varString);
if(str.Pos("\n")>0 )
return str;
else //没有接收到换行符,则延时再接收
{
Sleep(100);
s=MSComm1->Input;
str+=s.AsType(varString);
return str;
}
}

}
TripH0101 2010-01-06
  • 打赏
  • 举报
回复
不行啊
周药师 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 thwen0101 的回复:]
估计是线程的问题,我的串口读写是在线程中实现的,那在关闭窗口前怎么释放这个线程?
[/Quote]

pThread->Terminate();
TripH0101 2010-01-06
  • 打赏
  • 举报
回复
估计是线程的问题,我的串口读写是在线程中实现的,那在关闭窗口前怎么释放这个线程?
wxdcxp 2010-01-06
  • 打赏
  • 举报
回复
if (MSComm1->PortOpen==true)
{
MSComm1->PortOpen=false;
}
明朝2013 2010-01-05
  • 打赏
  • 举报
回复
把详细出错信息发出来
周药师 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thwen0101 的回复:]
引用 1 楼 silverpot 的回复:
在窗口关闭事件里,先关串口

if (MSComm1->PortOpen)
                {
                    MSComm1->PortOpen=false;
                }
没用
[/Quote]

MSComm1->OutBufferCount = 0 //清空发送缓冲区
MSComm1->InBufferCount = 0 //滑空接收缓冲区

然后用
try
{
}
catch(...)
{
}
把异常过滤掉试试

OutBufferCount
银点 2010-01-05
  • 打赏
  • 举报
回复
我从来没有使用过mscomm,我一直都是使用第三方的组件的。如果你用bcb或是delphi,可以试试TComPort这个组件,我经常做设备控制一直用这个,感觉很方便
TripH0101 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 silverpot 的回复:]
在窗口关闭事件里,先关串口
[/Quote]
if (MSComm1->PortOpen)
{
MSComm1->PortOpen=false;
}
没用
银点 2010-01-05
  • 打赏
  • 举报
回复
在窗口关闭事件里,先关串口

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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