Witam Państwa.
Próbuję napisać prosty programik w Builderze 6 który będzie odbierał dane wysyłane na RS232. W hypperterminalu widać otrzymywane znaki tzn, że urządzenie działa. Proszę o prosty kodzik/korektę. Posiadam książkę "RS232C praktyczne programowanie" mimo to mam problemy.

Napisałem coś takiego: (program nie działa) :(

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
    #define cbOutQueue 1024          //rozmiar bufora danych wyjściowych
    #define cbInQueue  1024          //rozmiar bufora danych wejściowych
    HFILE   hfile_s;              // identyfikator pliku źródłowego
    char    Buffer_O[cbOutQueue]; // bufor danych wyjściowych
    char    Buffer_I[cbInQueue];  // bufor danych wejściowych
    DWORD   Number_Bytes_Read;    // Number bytes to read -
                                  // liczba bajtów do czytania
    HANDLE  hCommDev;             // identyfikator portu
    LPCTSTR lpFileName;           // wskaźnik do nazwy portu
    DCB     dcb;                  // struktura kontroli portu szeregowego
    DWORD   fdwEvtMask;           // informacja o aktualnym stanie
                                  // transmisji
    COMSTAT Stat;                 // dodatkowa informacja o zasobach
                                  // portu
    DWORD   Errorss;               // reprezentuje typ ewentualnego błędu

int Close_Comm(HANDLE hCommDev)
{
    CloseHandle(hCommDev);
    return TRUE;
}

//--------------------------------------------------------------------
int Read_Comm(HANDLE hCommDev, LPDWORD lpNumberOfBytesRead, DWORD Buf_Size)
{
    DWORD nNumberOfBytesToRead;

    ClearCommError(hCommDev, &Errorss ,&Stat);

    if (Stat.cbInQue > 0)
      {
        if (Stat.cbInQue > Buf_Size)
            nNumberOfBytesToRead = Buf_Size;
          else
            nNumberOfBytesToRead = Stat.cbInQue;

        ReadFile(hCommDev, &Buffer_I[0], nNumberOfBytesToRead,
                 lpNumberOfBytesRead, NULL);
      }
      else
        *lpNumberOfBytesRead = 0;
    return TRUE;
}
//--------------------------------------------------------------------


//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
lpFileName = "COM1";
  hCommDev = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE,
                          0, NULL, OPEN_EXISTING, 0, NULL);

  if (hCommDev != INVALID_HANDLE_VALUE)   // sprawdza, czy port jest
                                            // otwarty prawidłowo
  {
    SetupComm(hCommDev, cbInQueue, cbOutQueue);

    dcb.DCBlength = sizeof(dcb);
    GetCommState(hCommDev, &dcb);

    dcb.BaudRate = CBR_9600;

    dcb.Parity = ODDPARITY;            // ustawienie parzystości
    dcb.StopBits = ONESTOPBIT;         // bity stopu
    dcb.ByteSize = 7;                  // bity danych

    //-przykładowe ustawienia flag sterujących DCB-
    dcb.fParity = TRUE;               // sprawdzanie parzystości
    dcb.fDtrControl = DTR_CONTROL_DISABLE;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;
    dcb.fOutxCtsFlow = FALSE;
    dcb.fOutxDsrFlow = FALSE;
    dcb.fDsrSensitivity = FALSE;
    dcb.fAbortOnError = FALSE;
    dcb.fOutX = FALSE;
    dcb.fInX = FALSE;
    dcb.fErrorChar = FALSE;
    dcb.fNull = FALSE;

    SetCommState(hCommDev, &dcb);

    GetCommMask(hCommDev, &fdwEvtMask);
    SetCommMask(hCommDev, EV_TXEMPTY);

    Button1->Enabled=false;
    Button2->Enabled=true;

    Timer1->Enabled = true;

  }
  else
  {
    switch ((int)hCommDev){
      case IE_BADID:
        MessageBox(NULL, "Niewłaściwa nazwa portu lub port jest"
                    " aktywny.", "Błąd", MB_OK);
        break;
    };
  }         
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer1->Enabled = false;
  Close_Comm(hCommDev);
  Button1->Enabled=true;
  Button2->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  memset(Buffer_I, 0, cbInQueue);

  PurgeComm(hCommDev, PURGE_TXABORT);
  Read_Comm(hCommDev, &Number_Bytes_Read, sizeof(Buffer_I));

  Label1->Caption = (Buffer_I);
}
//---------------------------------------------------------------------------