代码如下:
DWORD CTTYDoc::WriteComm(char *buf, DWORD dwLength)
{
BOOL fState;
OVERLAPPED m_osWrite;
DWORD length=dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
//清除错误条件;确定窗口状态
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
fState=WriteFile(m_hCom,buf,length,&length,&m_osWrite); if(!fState)
{ if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(m_hCom,&m_osWrite,&length,TRUE);// 等待
}
else
length=0;
} return length;
}
问题一、当输入一个字符时,传入的参数正常。length=dwLength,这条语句有问题,虽然dwLength为1,但length却为0。
问题二、不用length这个变量中转,直接用dwLength参数传入。第一次,大意竟然发现了一个问题。第一次改为WriteFile(m_hCom,buf, dwLength,&length,&m_osWrite) dwLength值仍然为1;发现错误后及时更正WriteFile(m_hCom,buf, dwLength,& dwLength,&m_osWrite)没想到dwLength值为0,在参数传入函数体时这个值就是0。
弄不懂上面的两个问题,希望大家帮忙,谢谢!
DWORD CTTYDoc::WriteComm(char *buf, DWORD dwLength)
{
BOOL fState;
OVERLAPPED m_osWrite;
DWORD length=dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
//清除错误条件;确定窗口状态
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
fState=WriteFile(m_hCom,buf,length,&length,&m_osWrite); if(!fState)
{ if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(m_hCom,&m_osWrite,&length,TRUE);// 等待
}
else
length=0;
} return length;
}
问题一、当输入一个字符时,传入的参数正常。length=dwLength,这条语句有问题,虽然dwLength为1,但length却为0。
问题二、不用length这个变量中转,直接用dwLength参数传入。第一次,大意竟然发现了一个问题。第一次改为WriteFile(m_hCom,buf, dwLength,&length,&m_osWrite) dwLength值仍然为1;发现错误后及时更正WriteFile(m_hCom,buf, dwLength,& dwLength,&m_osWrite)没想到dwLength值为0,在参数传入函数体时这个值就是0。
弄不懂上面的两个问题,希望大家帮忙,谢谢!
解决方案 »
- 关于listcontrol控件单击列标题进行排序的问题
- 关于键盘事件响应的问题的新问题
- 如何向dll里的变量赋值?
- 請教大家 pMsg->wParam==8 是什麼?
- 怎样打开一个文件,比如说我点一下菜单的帮助主题 它打开d:\calc.chm文件
- 流行的网站登陆采用验证码的方法的工作机制是什么样的?
- TNN的,只要能回答出来什么是系统资源这么简单的问题就有300分。在线等待。
- 急,中文字符串问题。
- 怎样得到对话框的值?
- SetFocus改变焦点不能立即生效
- WriteFile() 串口写时如何统计发送包的个数问题?
- 編譯問題!為何我在win2000下用Win32 Release MinSize編輯一個DLL,不能在沒有vc環境的win98下注冊
我就是这么写的,一切ok.