COM1口没有接硬件,对该com1口进行writefile操作,返回值总是0,对吗?,错误号“ERROR_IO_PENDING”,谁能帮我解释解释!!!

RiseSun 2004-10-20 02:44:34
有关com接口的问题
...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdy119 2004-10-20
  • 打赏
  • 举报
回复
WriteFile(m_hComDev,cBuf,sizeof(cBuf),&lpNumberOfBytesWritten,(LPOVERLAPPED)&osWriter);
怎么是sizeof(cBuf)?你定义的是一个长量指针,而不是缓冲去地址大小,
这样你测试:
char cBuf[]="oh";

RiseSun 2004-10-20
  • 打赏
  • 举报
回复
为何writefile的返回值总是0
GetLastError() != ERROR_IO_PENDING
RiseSun 2004-10-20
  • 打赏
  • 举报
回复
//-------------------------
无论我如何处理writefile的返回值都是0
GetLastError() != ERROR_IO_PENDING


//=================================
//打开com端口
HANDLE m_hComDev=CreateFile("COM1",
GENERIC_WRITE | GENERIC_READ,
0, // exclusive access
NULL, // no security attributes
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL
);
if(m_hComDev == INVALID_HANDLE_VALUE){
int j=GetLastError() ;
}
if( m_hComDev == NULL ) {
MessageBox( NULL, "全部地图打开", NULL,
MB_ICONEXCLAMATION | MB_OK );
return 0;
}
//设置端口的参数配置
DCB dcb;
dcb.DCBlength = sizeof(DCB);

BOOL fSuccess=GetCommState(m_hComDev,&dcb);

dcb.BaudRate = 1200;
dcb.fBinary=TRUE;
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = 0;//EVENPARITY;// Even parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
dcb.fAbortOnError=FALSE;

SetupComm(m_hComDev,2048,2048);

fSuccess = SetCommState(m_hComDev,&dcb );


OVERLAPPED osWriter;
memset(&osWriter,0,sizeof(OVERLAPPED));
osWriter.hEvent = CreateEvent(NULL,TRUE,FALSE, NULL);
if (osWriter.hEvent == NULL)
{
MessageBox( NULL, "全部地图打开", NULL,
MB_ICONEXCLAMATION | MB_OK );
}
char * cBuf="oh";

DWORD lpNumberOfBytesWritten;
PurgeComm(m_hComDev,PURGE_TXCLEAR|PURGE_RXCLEAR);
fSuccess=WriteFile(m_hComDev,cBuf,sizeof(cBuf),&lpNumberOfBytesWritten,(LPOVERLAPPED)&osWriter);
//fSuccess 总返回0
int i=GetLastError() ;

return 0;
gdy119 2004-10-20
  • 打赏
  • 举报
回复
你这是异步的串口编程,在调用writeFile()或者ReadFile()的时候
你投递的是一个重叠结构,返回ERROR_IO_PENDING说明你的投递重叠
I/O处理成功,只是操作还没完成,所以你应该等一段时间:
fSuccess=WriteFile(m_hComDev,cBuf,sizeof(cBuf),&lpNumberOfBytesWritten,(LPOVERLAPPED)&osWriter);
if(!fSuccess)
{
if(GetLastError()!=ERROR_IO_PENDING)
{
return False;
}
else
{
waitforsigleobject(fSuccess,6000);
}
}
//==================================================================
或者,一步到位:
if( !WriteFile() )
{
// 错误处理
if( GetLastError() != ERROR_IO_PENDING ||
!GetOverlappedResult(HANDLE(m_hConnectSocket), &m_ovWrite, &dwBytesSent, TRUE ))
{

return FALSE;
}
}
ResetEvent(m_ovWrite.hEvent);
}

RiseSun 2004-10-20
  • 打赏
  • 举报
回复
//打开com端口
HANDLE m_hComDev=CreateFile("COM1",
GENERIC_WRITE | GENERIC_READ,
0, // exclusive access
NULL, // no security attributes
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL
);
if(m_hComDev == INVALID_HANDLE_VALUE){
int j=GetLastError() ;
}
if( m_hComDev == NULL ) {
MessageBox( NULL, "全部地图打开", NULL,
MB_ICONEXCLAMATION | MB_OK );
return 0;
}
//设置端口的参数配置
DCB dcb;
dcb.DCBlength = sizeof(DCB);

BOOL fSuccess=GetCommState(m_hComDev,&dcb);

dcb.BaudRate = 1200;
dcb.fBinary=TRUE;
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = 0;//EVENPARITY;// Even parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
dcb.fAbortOnError=FALSE;

SetupComm(m_hComDev,2048,2048);

fSuccess = SetCommState(m_hComDev,&dcb );
char * buffer[20];
DWORD dwBytesRead;
dwBytesRead=5;
OVERLAPPED osReader;

memset(&osReader,0,sizeof(OVERLAPPED));

osReader.hEvent = CreateEvent(NULL,TRUE,FALSE, NULL);
if (osReader.hEvent == NULL)
{
MessageBox( NULL, "全部地图打开", NULL,
MB_ICONEXCLAMATION | MB_OK );
}

int i=GetLastError() ;
fSuccess = ReadFile( m_hComDev,&buffer,20,&dwBytesRead, &osReader);
i=GetLastError() ;
if (GetLastError() != ERROR_IO_PENDING) {

}
OVERLAPPED osWriter;
memset(&osWriter,0,sizeof(OVERLAPPED));
osWriter.hEvent = CreateEvent(NULL,TRUE,FALSE, NULL);
if (osWriter.hEvent == NULL)
{
MessageBox( NULL, "全部地图打开", NULL,
MB_ICONEXCLAMATION | MB_OK );
}
char * cBuf="o";

DWORD lpNumberOfBytesWritten;
PurgeComm(m_hComDev,PURGE_TXCLEAR|PURGE_RXCLEAR);
fSuccess=WriteFile(m_hComDev,cBuf,sizeof(cBuf),&lpNumberOfBytesWritten,(LPOVERLAPPED)&osWriter);
//fSuccess 总返回0
i=GetLastError() ;

fSuccess = ReadFile( m_hComDev,&buffer,20,&dwBytesRead, &osReader);
return 0;

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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