VC-API串口通信时,数据包后面会有很多000.

求助:VC-API串口通信时,数据包后面会有很多000...?
      最近要了个串口通信的程序,主要是硬件设备上报数据,数据量比较大,但是在很多时候收到一包数据时,后面会跟很多00000.....,希望能有串口通信高手来指点指点,

      先没设置串口缓冲区,后来设置后测试还是那样,感觉会不会是ReadFile()函数的第三个参数原因,     希望朋友们多指教


代码如下:
[code=C/C++]
//
BOOL   CSerialPort::InitPort(CWnd*   pPortOwner, //   the   owner   (CWnd)   of   the   port   (receives   message)
      UINT     portnr, //   portnumber   (1..4
      UINT     baud, //   baudrate
      char     parity, //   parity  
      UINT     databits, //   databits  
      UINT     stopbits, //   stopbits  
      UINT     writebuffersize, //   size   to   the   writebuffer
      DWORD   dwCommEvents   ) //   EV_RXCHAR,   EV_CTS   etc  
{
assert(portnr   >   0   &&   portnr   <   5);
assert(pPortOwner   !=   NULL);

//   if   the   thread   is   alive:   Kill
if   (m_bThreadAlive)
{
do
{
SetEvent(m_hShutdownEvent);
}   while   (m_bThreadAlive);
TRACE( "Thread   ended\n ");
}

//   create   events
if   (m_ov.hEvent   !=   NULL)
ResetEvent(m_ov.hEvent);
m_ov.hEvent   =   CreateEvent(NULL,   TRUE,   FALSE,   NULL);

if   (m_hWriteEvent   !=   NULL)
ResetEvent(m_hWriteEvent);
m_hWriteEvent   =   CreateEvent(NULL,   TRUE,   FALSE,   NULL);

if   (m_hShutdownEvent   !=   NULL)
ResetEvent(m_hShutdownEvent);
m_hShutdownEvent   =   CreateEvent(NULL,   TRUE,   FALSE,   NULL);

//   initialize   the   event   objects
m_hEventArray[0]   =   m_hShutdownEvent; //   highest   priority
m_hEventArray[1]   =   m_ov.hEvent;
m_hEventArray[2]   =   m_hWriteEvent;

//   initialize   critical   section
InitializeCriticalSection(&m_csCommunicationSync);
//   set   buffersize   for   writing   and   save   the   owner
m_pOwner   =   pPortOwner;

if   (m_szWriteBuffer   !=   NULL)
delete   []   m_szWriteBuffer;
m_szWriteBuffer   =   new   char[writebuffersize];

m_nPortNr   =   portnr;
m_nWriteBufferSize   =   writebuffersize;
m_dwCommEvents   =   dwCommEvents;

BOOL   bResult   =   FALSE;
char   *szPort   =   new   char[50];
char   *szBaud   =   new   char[50];

//   now   it   critical!
EnterCriticalSection(&m_csCommunicationSync);
//   if   the   port   is   already   opened:   close   it
if   (m_hComm   !=   NULL)
{
CloseHandle(m_hComm);
m_hComm   =   NULL;
}
//   prepare   port   strings
sprintf(szPort,   "COM%d ",   portnr);
sprintf(szBaud,   "baud=%d   parity=%c   data=%d   stop=%d ",   baud,   parity,   databits,   stopbits);

//   get   a   handle   to   the   port