if (hCon==(HANDLE)-1) //这句看不懂,HANDEL的定义为 typedef void *HAN
- C/C++ code
hCon=CreateFile("COM1", //串口名称 GENERIC_READ|GENERIC_WRITE, //允许读和写 0, //独占方式 NULL, OPEN_EXISTING, //打开而不是创建 FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//重叠方式 NULL); if (hCon==(HANDLE)-1) //这句看不懂,HANDEL的定义为 typedef void *HANDLE; { MessageBox("打开com口失败!"); return FALSE; } SetupComm(hCon,100,100); //输入缓冲区和输出缓冲区的大小都是100 COMMTIMEOUTS TimeOuts; //超时时 TimeOuts.ReadIntervalTimeout=MAXDWORD; TimeOuts.ReadTotalTimeoutMultiplier=0; TimeOuts.WriteTotalTimeoutConstant=0; TimeOuts.WriteTotalTimeoutMultiplier=100; SetCommTimeouts(hCon,&TimeOuts);//设置超时 DCB dcb; GetCommState(hCon,&dcb); dcb.BaudRate=9600; dcb.ByteSize=8;//每个字节有8位 dcb.Parity=NOPARITY;//无奇偶校验 dcb.StopBits=TWOSTOPBITS;//两个停止位 SetCommState(hCon,&dcb); PurgeComm(hCon,PURGE_TXCLEAR|PURGE_RXCLEAR);if (hCon==(HANDLE)-1) 对于该语句, 我有一点不明,HANDLE算哪门子的变量呢,它不是定义的一个VOID类型吗(typedef void *HANDLE),为何可以相加减?typedef void *HANDLE的真正含义是什么呢,该怎样理解?HANDLE-1又是什么意思呢,求教。
[解决办法]
这个有点意思.
-1 可以是 减-, 可以是 负1.
此处应该是负1.
[解决办法]
if (hCon==(HANDLE)-1) 对于该语句, 我有一点不明,HANDLE算哪门子的变量呢,
看到这里真心笑了, 当然不是嘲笑哈, 是因为我曾经也这么理解过.
实际它想做的是把 -1强制转换成 HANDLE类型.
如果这里不是HANDLE,而是int if( hCon = (int)-1 ),我想楼主就不会把int看成是变量了吧.
这里也提醒了, 多加括号,提高程序可读性啊.
如果是
if (hCon==(HANDLE)(-1)) 这想楼主也不会把 HANDLE理解成变量了.
[解决办法]
if (hCon==(HANDLE)-1) 这么些 表示很蛋疼
if (INVALID_HANDLE_VALUE == hCom) 这样才是正确写法
msdn都写着呢用 INVALID_HANDLE_VALUE 判断,还非要这样写。
#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)