WriteFile出错,GetLastError得到87。

helen_alone 2008-04-12 01:10:17
设置如下,能进行接收数据,但是发送数据返回87。总是发不出去
m_handle=CreateFile(g_comm.comm,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if(m_handle==INVALID_HANDLE_VALUE)
return false;

//初始化串口,READBUFFER,WRITEBUFFER是用户自己定义的
SetupComm(m_handle,SERIAL_BUF_NUM,SERIAL_BUF_NUM);
PurgeComm(m_handle,PURGE_TXCLEAR|PURGE_RXCLEAR);

//设置DCB参数
if(!GetCommState(m_handle,&dcb))
{
CloseHandle(m_handle);
return false;
}
dcb.BaudRate=atol(g_comm.btl);
dcb.ByteSize=atoi(g_comm.data);
if(g_comm.parity == "无")
dcb.Parity=NOPARITY;
else if(g_comm.parity == "奇")
dcb.Parity=ODDPARITY;
else
dcb.Parity=EVENPARITY;
if(g_comm.stop == "1")
dcb.StopBits=ONESTOPBIT;
else
dcb.StopBits=TWOSTOPBITS;
if(!SetCommState(m_handle,&dcb))
{
CloseHandle(m_handle);
return false;
}
//设置超时值
COMMTIMEOUTS to;
to.ReadIntervalTimeout=MAXDWORD;
to.ReadTotalTimeoutConstant=500;
to.ReadTotalTimeoutMultiplier=10;
to.WriteTotalTimeoutConstant=0;
to.WriteTotalTimeoutMultiplier=0;
if(!SetCommTimeouts(m_handle,&to))
{
CloseHandle(m_handle);
return false;
}
if(!SetCommMask(m_handle,EV_RXCHAR))
{
CloseHandle(m_handle);
return false;
}


发送函数:
BOOL fWriteStat =WriteFile(m_handle, pBuf->pBuf+pBuf->wReadPtr, num, &sendnum, NULL);
int err=GetLastError();
...全文
5281 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
十月兔 2010-09-21
  • 打赏
  • 举报
回复
glacierful是对的,我也遇到了这个问题,按他的方法解决了
glacierful 2010-08-12
  • 打赏
  • 举报
回复
今天我也遇上了这个问题,搜到了这个帖子,没有答案。
我自己解决了,把答案写出来,但不知道是否适合楼上的一些朋友。

WriteFile或者ReadFile时,最后一个参数需要传入一个OVERLAPPED结构,而且它的Offset和OffsetHigh两个成员需要设为0,hEvent成员需要一个事件(CreateEvent)。
ocb0123 2010-03-17
  • 打赏
  • 举报
回复
dsfedfdsfdsfsdfsdfsdfsdf
jixiangyong 2010-03-09
  • 打赏
  • 举报
回复
遇到同样问题 求方案
btkxql 2008-09-18
  • 打赏
  • 举报
回复
我也遇到这样的问题当,怎么解决啊?
xiaoQ008 2008-04-13
  • 打赏
  • 举报
回复
87的话
用 look_up查一下
应该是参数错误
helen_alone 2008-04-13
  • 打赏
  • 举报
回复
接收数据是正确的,所以m_handle是有效的。
参数,那个NULL是不是有问题,因为我CreateFile是选择的带有异步的,发送不选择异步有问题吗?
helen_alone 2008-04-13
  • 打赏
  • 举报
回复
接收数据是正确的,所以m_handle是有效的。
参数,那个NULL是不是有问题,因为我CreateFile是选择的带有异步的,发送不选择异步有问题吗?
sanvl 2008-04-12
  • 打赏
  • 举报
回复
Debug模式 在下边监视name填入 @err,hr 可以看到错误信息
Eleven 2008-04-12
  • 打赏
  • 举报
回复
Up!
arong1234 2008-04-12
  • 打赏
  • 举报
回复
87表示ERROR_INVALID_PARAMETER,可能某个参数不合法
scq2099yt 2008-04-12
  • 打赏
  • 举报
回复
up
cnzdgs 2008-04-12
  • 打赏
  • 举报
回复
如果函数返回失败后再用GetLastError,函数返回成功时GetLastError的返回值不一定是0。
CrownLiu 2008-04-12
  • 打赏
  • 举报
回复
m_handle是有效的吗?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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