在网上下载了一个CSerialPort类,然后用VS2010创建了一个基于MFC的工程,发现打开串口就是不灵,用GetLastError()返回是2,但是用串口调试工具试是好的……工程属性选择了Unicode,麻烦诸位高手帮看看怎么回事
这个是调用部分
这个是调用部分
void CSerialPortDemoDlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here bool bStauts; TCHAR str[256] = {}; int i = m_cmbCom.GetCurSel() + 1; bStauts = CSPort.InitPort(this,i,19200,"N",8,1,9,512,1000,1000,1000,1000,1000); if (bStauts) { MessageBoxW(str,_T("端口正确")); } else { MessageBoxW(str,_T("端口错误")); }
这个是InitPort的部分
sprintf(szBaud, "baud=%d parity=%c data=%d stop=%d", baud, parity, databits, mystop); // get a handle to the port m_hComm = CreateFile((LPCWSTR)szPort, // communication port string (COMX) GENERIC_READ | GENERIC_WRITE, // read/write types 0, // comm devices must be opened with exclusive access NULL, // no security attributes OPEN_EXISTING, // comm devices must use OPEN_EXISTING FILE_FLAG_OVERLAPPED, // Async I/O 0); // template must be 0 for comm devices if (m_hComm == INVALID_HANDLE_VALUE) { INT err = GetLastError(); // port not found delete [] szPort; delete [] szBaud; return FALSE; }
解决方案
20
GetLastError()返回的2可能是个枚举值或宏,你追进去看看对应的是什么。
CreateFile是类库中打开串口的方法吗?很有趣的是他为什么这样命名呢…
CreateFile是类库中打开串口的方法吗?很有趣的是他为什么这样命名呢…
20
printf("请输入COM口(1):"); gets(temp); if (*temp) sprintf(port,"\\.\COM%d",atoi(temp)); else strcpy(port,"\\.\COM1");