大家好,又见面了,我是你们的朋友全栈君。
出错情况:设备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显示为“拒绝访问”
出错原因:因为之前的串口仍被占用还没有释放,互换串口后,再次初始化串口时会失败(拒绝访问)。解决办法:每次使用完串口后,将其关闭,再次使用时(针对串口互换的这种情况),就不会出错了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145722.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...