我写了一个串口发送数据的函数,可是不知道为什么总是不行,高手一定帮帮忙啊!
代码如下:CFile CommFile;
HANDLE m_hComm=NULL;
void senddata()
{
if(m_hComm != NULL)
{
CloseHandle(m_hComm);
}
m_hComm = CreateFile(
"COM2",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL
); if (m_hComm == NULL)
{
AfxMessageBox("open error!");
return;
}
DCB mDCB;
GetCommState(m_hComm,&mDCB);
mDCB.BaudRate = 9600;
mDCB.fBinary = TRUE;
mDCB.ByteSize = 8;
mDCB.Parity = 2;
mDCB.StopBits = 0;
mDCB.fParity = 1;
if (!SetCommState(m_hComm,&mDCB))
{
AfxMessageBox("set error!");
return;
}
COMMTIMEOUTS CommTimeouts;
CommTimeouts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeouts.ReadTotalTimeoutMultiplier = 500 ;
CommTimeouts.ReadTotalTimeoutConstant = 5000 ;
CommTimeouts.WriteTotalTimeoutMultiplier = 500;
CommTimeouts.WriteTotalTimeoutConstant = 5000 ;
if (!SetCommTimeouts(m_hComm, &CommTimeouts ))
{
AfxMessageBox("set timeouts error!");
return;
} OVERLAPPED mOverLapped;
DWORD mWritedNum = 0;
BOOL bState;
unsigned char msg[5]={0x10,0x40,0x01,0x41,0x16};
mOverLapped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
if(mOverLapped.hEvent == NULL)
{
AfxMessageBox("Create Event error!");
return;
}
bState = WriteFile(m_hComm,&msg,(DWORD)5,&mWritedNum,&mOverLapped);
if(!bState)
{
DWORD dwError;
dwError = GetLastError();
if ( dwError == ERROR_IO_PENDING )
{
GetOverlappedResult(m_hComm,&mOverLapped,&mWritedNum,TRUE);// 等待
}
}
return;
}可是怎么也发不出去,而且我扑捉到的GetLastError() = 0x57,而ERROR_IO_PENDING = 0x17,这是怎么回事啊?
代码如下:CFile CommFile;
HANDLE m_hComm=NULL;
void senddata()
{
if(m_hComm != NULL)
{
CloseHandle(m_hComm);
}
m_hComm = CreateFile(
"COM2",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL
); if (m_hComm == NULL)
{
AfxMessageBox("open error!");
return;
}
DCB mDCB;
GetCommState(m_hComm,&mDCB);
mDCB.BaudRate = 9600;
mDCB.fBinary = TRUE;
mDCB.ByteSize = 8;
mDCB.Parity = 2;
mDCB.StopBits = 0;
mDCB.fParity = 1;
if (!SetCommState(m_hComm,&mDCB))
{
AfxMessageBox("set error!");
return;
}
COMMTIMEOUTS CommTimeouts;
CommTimeouts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeouts.ReadTotalTimeoutMultiplier = 500 ;
CommTimeouts.ReadTotalTimeoutConstant = 5000 ;
CommTimeouts.WriteTotalTimeoutMultiplier = 500;
CommTimeouts.WriteTotalTimeoutConstant = 5000 ;
if (!SetCommTimeouts(m_hComm, &CommTimeouts ))
{
AfxMessageBox("set timeouts error!");
return;
} OVERLAPPED mOverLapped;
DWORD mWritedNum = 0;
BOOL bState;
unsigned char msg[5]={0x10,0x40,0x01,0x41,0x16};
mOverLapped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
if(mOverLapped.hEvent == NULL)
{
AfxMessageBox("Create Event error!");
return;
}
bState = WriteFile(m_hComm,&msg,(DWORD)5,&mWritedNum,&mOverLapped);
if(!bState)
{
DWORD dwError;
dwError = GetLastError();
if ( dwError == ERROR_IO_PENDING )
{
GetOverlappedResult(m_hComm,&mOverLapped,&mWritedNum,TRUE);// 等待
}
}
return;
}可是怎么也发不出去,而且我扑捉到的GetLastError() = 0x57,而ERROR_IO_PENDING = 0x17,这是怎么回事啊?
解决方案 »
- 透明窗口 SetLayeredWindowAttributes(别的板块无人)
- MFC日历控件的问题,急~~~~
- warning LNK4084: total image size 822210560 exceeds max (268435456); image may not run
- 很简单的问题
- 请教诸位大侠:DataGrid组件(v6.0),怎样改变列的宽度,我要给每列设定不同的宽度,不是要固定的那种
- 关于动画窗口的问题,请高手指点。
- 为什么在VC6里生成摸版类会出错?高分相送!!!
- Need for speed
- 大家一定要帮我呀?我拜托了!
- 播放器控件的问题~~~
- 可否让窗口是透明的,且没有菜单栏标题栏等,只有一个框。
- 帮个忙。
0x17 == 数据错误(循环冗余检查)。
应该在mOverLapped.hEvent = CreateEvent(..);前加一句:
memset( &mOverLapped, 0, sizeof( OVERLAPPED ) );
这样就可以了。呵呵,不管怎么说,都要谢谢楼上几位,大家都有分!