CreateFile打开串口失败 GetLastError()返回值为2

oishi101 2011-08-31 05:47:21
编译环境为C++ builder 2009
代码如下:
BOOL CSerial::Open( int nPort, int nBaud )
{
if( m_bOpened ) return( TRUE );

char szPort[15];
char szComParams[50];
DCB dcb;

if(nPort > 9)
wsprintf( (wchar_t *)szPort, (wchar_t *)"\\\\.\\COM%d", nPort );
else
wsprintf( (wchar_t *)szPort,(wchar_t *) "COM%d", nPort );
m_hIDComDev = CreateFile( (wchar_t *)szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
if( m_hIDComDev == NULL ) return( FALSE );

memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) );
memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );

COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts( m_hIDComDev, &CommTimeOuts );

sprintf( szComParams, "COM%d:%d,n,8,1", nPort, nBaud );

m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );

dcb.DCBlength = sizeof( DCB );
GetCommState( m_hIDComDev, &dcb );
dcb.BaudRate = nBaud;
dcb.ByteSize = 8;
dcb.fRtsControl = RTS_CONTROL_DISABLE; //RTS_CONTROL_ENABLE; // set RTS bit high!
unsigned char ucSet;
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_DTRDSR ) != 0 );
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_RTSCTS ) != 0 );
ucSet = (unsigned char) ( ( FC_RTSCTS & FC_XONXOFF ) != 0 );
if( !SetCommState( m_hIDComDev, &dcb ) ||
!SetupComm( m_hIDComDev, 10000, 10000 ) ||
m_OverlappedRead.hEvent == NULL ||
m_OverlappedWrite.hEvent == NULL ){
DWORD dwError = GetLastError();
if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );
if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );
CloseHandle( m_hIDComDev );
return( FALSE );
}

m_bOpened = TRUE;

return( m_bOpened );

}


想打开串口 使用命令AtCom.open(1,115200) 逐步调试的时候发现CreateFile失败 用GetLastError 显示错误代码为2
请教如何修改? 谢谢好心人
...全文
1527 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
走好每一步 2011-09-09
  • 打赏
  • 举报
回复
找不到该文件
weiwei22844 2011-09-09
  • 打赏
  • 举报
回复
强悍啊,谢谢了
jackyjkchen 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 loaden 的回复:]

wsprintf( (wchar_t *)szPort, (wchar_t *)"\\\\.\\COM%d", nPort );
else
wsprintf( (wchar_t *)szPort,(wchar_t *) "COM%d", nPort );
这里错了。
改成:
wsprintf(szPort, L"\\\\.\\COM%d", nPort );
另外:
char sz……
[/Quote]
++
被老邓抢先了,又见莫名其妙的强制转换
「已注销」 2011-08-31
  • 打赏
  • 举报
回复
wsprintf( (wchar_t *)szPort, (wchar_t *)"\\\\.\\COM%d", nPort );
else
wsprintf( (wchar_t *)szPort,(wchar_t *) "COM%d", nPort );
这里错了。
改成:
wsprintf(szPort, L"\\\\.\\COM%d", nPort );
另外:
char szPort[15];
应该用
wchar_t szPort[15];

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧