我的串口读不到数据.net程序

zhaojiang1   2007-3-5 17:18 楼主
public void Open()
                        {
                                //Init_Comm();
                                DCB dcbCommPort = new DCB();
                                COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
   
   
                                // OPEN THE COMM PORT.

   
                                hComm = CreateFile("COM1:",GENERIC_READ | GENERIC_WRITE,0, 0,OPEN_EXISTING,0,0);
  
                                // IF THE PORT CANNOT BE OPENED, BAIL OUT.
                                if(hComm == INVALID_HANDLE_VALUE)
                                {
                                        throw(new ApplicationException("Comm Port Can Not Be Opened"));
                                }
  
                                // SET THE COMM TIMEOUTS.
   
                                GetCommTimeouts(hComm,ref ctoCommPort);
                                ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
                                ctoCommPort.ReadTotalTimeoutMultiplier = 0;
                                ctoCommPort.WriteTotalTimeoutMultiplier = 0;
                                ctoCommPort.WriteTotalTimeoutConstant = 0;
                                SetCommTimeouts(hComm,ref ctoCommPort);
  
                                // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
                                // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
                                // IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
                                // THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
                                // ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.
  
                                dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
                                GetCommState(hComm, ref dcbCommPort);
                                dcbCommPort.BaudRate=BaudRate;
                                dcbCommPort.Parity=Parity;
                                dcbCommPort.ByteSize=ByteSize;
                                dcbCommPort.StopBits=StopBits;
                                SetCommState(hComm, ref dcbCommPort);
   
                                Opened = true;
   
                        }
public byte[] Read(int NumBytes)
                        {
                                byte[] BufBytes;
                                byte[] OutBytes;
                                BufBytes = new byte[NumBytes];
                                if (hComm!=INVALID_HANDLE_VALUE)
                                {
                                        OVERLAPPED ovlCommPort = new OVERLAPPED();
                                        int BytesRead=0;
                                        ReadFile(hComm,BufBytes,NumBytes,ref BytesRead,ref ovlCommPort);
                                        OutBytes = new byte[BytesRead];
                                        Array.Copy(BufBytes,0,OutBytes,0,BytesRead);
                                }
                                else
                                {
                                        throw(new ApplicationException("Comm Port Not Open"));
                                }
                                return OutBytes;
                        }
那位大哥能帮我看看那里有错误。

回复评论 (1)

没有高手能帮我看看吗?readfile()函数有问题吗?
bool ReadFile(
                                int hFile,                // handle to file
                                byte[] lpBuffer,             // data buffer
                                int nNumberOfBytesToRead,  // number of bytes to read
                                ref int lpNumberOfBytesRead, // number of bytes read
                                ref OVERLAPPED lpOverlapped    // overlapped buffer
                                );
这是原形
点赞  2007-3-6 11:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复