m0_37251658 2017-01-04 09:26 采纳率: 0%
浏览 1539
已结题

VC++中使用API编写串口通信程序,调用函数时提示串口句柄未定义

初学者,好多地方不懂,以下是部分代码

#include
#include
#include

bool openport(char*portname)
{
HANDLE hComm;
hComm=CreateFile(portname,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
if(hComm == INVALID_HANDLE_VALUE)
{
CloseHandle(hComm);
return FALSE;
}
else
{
return TRUE;
}
}

bool setupdcb(int rate_arg)
{

DCB dcb;
int rate=rate_arg;
memset(&dcb,0,sizeof(dcb));
if(!GetCommState(hComm,&dcb))
{
    return false;
}
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate=rate;
dcb.Parity=NOPARITY;

dcb.fParity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = 0;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fErrorChar = 0;
dcb.fBinary = 1;
dcb.fNull = 0;
dcb.fAbortOnError = 0;
dcb.wReserved = 0;
dcb.XonLim = 2;
dcb.XoffLim = 4;
dcb.XonChar = 0x13;
dcb.XoffChar = 0x19;
dcb.EvtChar = 0;
if(!SetCommState(hComm,&dcb))
{
return false;
}
else
{
return true;
}
}

......

void main()
{
bool open;
open=openport("com2");
if(open)
printf("open comport success");
if(setupdcb(9600))
printf("setupDCB success\n");
if(setuptimeout(0,0,0,0,0))
printf("setuptimeout success\n");
SetCommMask(hComm, EV_RXCHAR);
PurgeComm(hComm,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_TXABORT);
system("pause") ;
}

以上是部分程序代码

报错信息
D:\TEST C++\T1\testport\testport.cpp(34) : error C2065: 'hComm' : undeclared identifier

提示if(!GetCommState(hComm,&dcb))报错,串口句柄未定义,求解决,谢谢各位大神了

  • 写回答

4条回答

  • shen_wei 2017-01-04 09:39
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?