在网上下载了一个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");