社区
C++ Builder
帖子详情
用 CreateFile 方法打开了串口,如何关闭。
s98231106
2003-02-20 12:45:10
如题。
...全文
506
6
打赏
收藏
用 CreateFile 方法打开了串口,如何关闭。
如题。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gfh_79_0
2003-02-20
打赏
举报
回复
转贴:
HANDLE hComm; //将给串行端口使用的Handle声明全局变量
bool PortOpen; //判断串行端口是否打开声明全局变量
void __fastcall TForm1::Button1Click(TObject *Sender)
{if(PortOpen==false)
{ char *ComNo;
DCB dcb;
String Temp;
//取得要打开的通信端口
Temp = "COM1";
//转换至指针类型Char
ComNo = Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm == INVALID_HANDLE_VALUE) // 如果COM 未打开
{
MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
return;
}
//将dcb地址传入,以取得通信参数
GetCommState(hComm,&dcb); // 得知目前COM 的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为 8 bit
dcb.Parity = NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1 个Stop bit
//通信端口设置
if (!SetCommState(hComm, &dcb)) { // 设置COM 的状态
MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm);
return;
}
PortOpen=true;
}
else
{ShowMessage("通信端口已打开"); PortOpen=false;
}
}
//------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ CloseHandle(hComm); //关闭通讯端口
}
penu
2003-02-20
打赏
举报
回复
关闭句柄。
7rainbow
2003-02-20
打赏
举报
回复
同上。
szbug
2003-02-20
打赏
举报
回复
CloseHandle(xxx);
arran
2003-02-20
打赏
举报
回复
__fastcall TForm1::~TForm1(void)
{
PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
CloseHandle(hComm);
}
kingfish
2003-02-20
打赏
举报
回复
1
CloseHandle(hd);就行
CSerialPort
串口
类最新修正版2016-08-10
CSerialPort First Version by Remon Spekreijse on 2000-02-08 http://www.codeguru.com/cpp/i-n/network/serialcommunications/article.php/c2483/A-communication-class-for-serial-port.htm Second Version by mrlong on 2007-12-25 https://code.google.com/p/mycom/ 增加 ClosePort 增加 WriteToPort 两个
方法
增加 SendData 与 RecvData
方法
by liquanhai on 2011-11-04 http://blog.csdn.net/liquanhai/article/details/4955253 增加 ClosePort 中交出控制权,防止死锁问题 by liquanhai on 2011-11-06 http://blog.csdn.net/liquanhai/article/details/6941574 增加 ReceiveChar 中防止线程死锁 by viruscamp on 2013-12-04 https://github.com/viruscamp/CSerialPort 增加 IsOpen 判断是否
打开
修正 InitPort 中 parity Odd Even 参数取值错误 修改 InitPort 中 portnr 取值范围,portnr>9 时特殊处理 取消对 MFC 的依赖,使用 HWND 替代 CWnd,使用 win32 thread 函数而不是 MFC 的 增加用户消息编号自定义,
方法
来自 CnComm by itas109 on 2014-01-10 http://blog.csdn.net/itas109/article/details/18358297 解决COM10以上端口无法显示的问题 扩展可选择端口,最大值MaxSerialPortNum可以自定义 添加QueryKey()和Hkey2ComboBox两个
方法
,用于自动查询当前有效的
串口
号。 by liquanhai on 2014-12-18 增加一些处理措施,主要是对减少CPU占用率 by itas109 on 2016-05-07 http://blog.csdn.net/itas109 修复每次
打开
串口
发送一次,当
串口
无应答时,需要
关闭
再
打开
或者接收完数据才能发送的问题。 解决办法:在m_hEventArray中调整m_hWriteEvent的优先级高于读的优先级。CommThread(LPVOID pParam)函数中读写的位置也调换。 参考:http://zhidao.baidu.com/link?url=RSrbPcfTZRULFFd2ziHZPBwnoXv1iCSu_Nmycb_yEw1mklT8gkoNZAkWpl3UDhk8L35DtRPo5VV5kEGpOx-Gea 修复停止位在头文件中定义成1导致SetCommState报错的问题,应为1对应的停止位是1.5。UINT stopsbits = ONESTOPBIT switch(stopbits)和switch(parity)增加默认情况,增强程序健壮性 by itas109 on 2016-06-22 http://blog.csdn.net/itas109 增加ReceiveStr
方法
,用于接收字符串(接收缓冲区有多少字符就接收多少字符)。 解决ReceiveChar只能接收单个字符的问题。 by itas109 on 2016-06-29 http://blog.csdn.net/itas109 解决RestartMonitoring
方法
和StopMonitoring
方法
命令不准确引起的歧义,根据实际作用。 将RestartMonitoring更改为ResumeMonitoring,将StopMonitoring更改为SuspendMonitoring。 增加IsThreadSuspend
方法
,用于判断线程是否挂起。 改进ClosePort
方法
,增加线程挂起判断,解决由于线程挂起导致
串口
关闭
死锁的问题。 增加IsReceiveString宏定义,用于接收时采用单字节接收还是多字节接收 by itas109 on 2016-08-02 http://blog.csdn.net/itas109 https://github.com/itas109 改进IsOpen
方法
,m_hComm增加INVALID_HANDLE_VALUE的情况,因为
Create
File
VC的
Create
File
出现不能
打开
超过9的
串口
VC的
Create
File
出现不能
打开
超过9的
串口
mfc 读写
串口
方法
_
串口
读写
mfc 读写
串口
方法
用
create
file
方式
打开
串口
,read
file
读
串口
、write
file
写
串口
delphi 下API函数写
串口
delphi 利用API函数写
串口
。 //建立
串口
句柄 CommHandle :=
Create
File
(PChar(ComboBox1.Text),GENERIC_WRITE or GENERIC_READ, 0,nil,OPEN_EXISTING,
FILE
_FLAG_OVERLAPPED or
FILE
_ATTRIBUTE_NORMAL,0); if CommHandle = INVALID_HANDLE_VALUE then begin CloseHandle(PostEvent); CloseHandle(ReadOs.hEvent); MessageBox(0,'
串口
打开
失败!','Notice',MB_OK); StatusBar1.SimpleText := '
串口
打开
失败'; Exit; end;
Visual Studio 2013
串口
类
最近调试
串口
获取机芯日志,要做个上位机工具能随时查看机芯的本地日志。起初想参考合泰源码做一份,但是考虑到通用性。如果未来要做其他项目,又得改
串口
类的代码,很麻烦。所以想整一份自己的专属
串口
类,方便后续移植使用。 网上参考了很多资料,基本上都是大同小异。打算自己重构一份,使用双线程,实现读写分离,环形数组收发数据。应用层可以向指定的环形数组,随时随地写入不定长度的数据。或者随时随地从指定的环形数组,读取不定长度的数据。《Hankin》 参考资料如下: 《MFC图文并茂详解.doc》 《SCOM_MFC2.rar》 《serial_src.zip》 《SerialCom_YiHai_TEST-master.zip》 《SerialComSoftware_自写详细注释.rar》 《VC_MFC
串口
通信编程详解.pdf》 《VC++
串口
通信20个经典源码合集.rar》 《
串口
通信处女作.zip》 《用MFC实现
串口
编程.doc》
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章