CreateFile()打开串口失败,返回句柄值为0xffffffff

6 篇文章 0 订阅

出错情况:设备1和设备2分别使用COM1和COM2外界通信,在不关闭软件的情况下,调换串口(即设备1/2,分别使用COM2/1),此时出错?以下是查找原因的步骤:

_hCommHandle = ::CreateFile(
	_szCommStr,
	GENERIC_READ | GENERIC_WRITE,
	0,
	NULL,
	OPEN_EXISTING,
	FILE_FLAG_OVERLAPPED,			
	NULL
	);

打开串口,执行到这里时,_hCommHandle的值为INVALID_HANDLE_VALUE(0xffff ffff),根据函数的帮助文件知道可以利用GetLastError()获取出错原因,如下:

///查找错误
DWORD erM=0;
LPVOID lpMsgBuf;
CString theErr;
if(_hCommHandle==INVALID_HANDLE_VALUE) erM=GetLastError();
FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            erM,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );
theErr.Format("%s",lpMsgBuf);//theErr显示为“拒绝访问”
出错原因:因为之前的串口仍被占用还没有释放,互换串口后,再次初始化串口时会失败(拒绝访问)。解决办法:每次使用完串口后,将其关闭,再次使用时(针对串口互换的这种情况),就不会出错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值