figo
路人甲
路人甲
  • 注册日期2006-03-24
  • 发帖数53
  • QQ83877352
  • 铜币275枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2342回复:2

[求助]急!!请帮忙看看这个串口读取到底那里错了?

楼主#
更多 发布于:2006-05-15 17:15
<P>public bool ReadPort(ref char[] m_Buffer,ref int m_BufPos)  <br>  { <br>   if (hComm == INVALID_HANDLE_VALUE) <br>   {<br>        return false; <br>   }<br>   COMSTAT ComStat = new COMSTAT(); <br>   int dwErrorFlags = 0; </P>
<P>   ClearCommError(hComm, ref dwErrorFlags, ref ComStat);  <br>   <br>   if (dwErrorFlags != 0) <br>   {<br>    PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT); <br>   }</P>
<P>   if (ComStat.cbInQue > 0) <br>   {<br>    OVERLAPPED ovlCommPort = new OVERLAPPED(); <br>    int NumBytes=ComStat.cbInQue;<br>    byte[] BufBytes = new byte[NumBytes]; <br>    int BytesRead=0; <br>    if(!ReadFile(hComm,BufBytes,NumBytes,ref BytesRead,ref ovlCommPort))<br>    {<br>         return false;<br>    }<br>    if(BytesRead>0)<br>    {<br>          for(int i=0;i<BytesRead;i++)<br>     {</P>
<P>      m_Buffer[m_BufPos+i]=Convert.ToChar(BufBytes);</P>
<P>     }<br>     m_BufPos+=BytesRead;<br>     return true;<br>    }<br>    else<br>    {<br>     return false;<br>    }<br>   }  </P>
<P>   else<br>   {<br>          return false;<br>   }<br>  } //end ReadPort</P>
<P>我是先设置了一个button,用来打开串口,另外,我使用了timer控件,使用了tick,如果串口打开成功,使timer的enable为true,开始读串口数据。现在串口打开成功,但是就是没有数据,不知哪里错了。C#写的。</P>
<P>请各位高手帮帮忙吧。谢谢各位了!!</P>

[此贴子已经被作者于2006-5-15 17:28:27编辑过]
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15946
  • QQ554730525
  • 铜币25338枚
  • 威望15363点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2006-05-17 22:18
<P>没有提示任何错误吗</P>
举报 回复(0) 喜欢(0)     评分
figo
路人甲
路人甲
  • 注册日期2006-03-24
  • 发帖数53
  • QQ83877352
  • 铜币275枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-05-17 22:31
<P>没有提示错误,只是在pda上运行时一直没有数据读出。ComStat.cbInQue一直是0,但是如果没有ClearCommError(hComm, ref dwErrorFlags, ref ComStat);  作处理直接ReadFile 的话 会死机。</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部