
открываю файл на COM порт:
hSerialPort = CreateFile(SerialPort, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if ( hSerialPort == INVALID_HANDLE_VALUE )
{
ShowMessage("Îøèáêà îòêðûòèÿ COM ïîðòà");
return;
}

устанавливаю параметры:
DCB dcb;
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = 9600;
dcb.fBinary = 1;
dcb.fParity = 0;
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = 0;
dcb.fDsrSensitivity = 0;
dcb.fTXContinueOnXoff = 0;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fErrorChar = 0;
dcb.fNull = 0;
dcb.fRtsControl = 0;
dcb.fAbortOnError = 0;
dcb.fDummy2 = 0;
dcb.wReserved = 0;
dcb.XonLim = 2048;
dcb.XoffLim = 512;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = 0;
dcb.XonChar = 17; //17
dcb.XoffChar = 19; //19
dcb.ErrorChar = 0;//0
dcb.EofChar = 26; //26
dcb.EvtChar = 0;//0
dcb.wReserved1 = 0;
if( !SetCommState(hSerialPort, &dcb )){
CloseHandle(hSerialPort);
hSerialPort = NULL;
ShowMessage("Îøèáêà èíèöèàëèçàöèè COM ïîðòà");
return;
}

читаю из файла:
static unsigned __stdcall ReceiveData(void* param)
{
OVERLAPPED overlap = {0};
char lpBuffer[65];
DWORD BytesToRead = 64; //
BOOL fRead;
DWORD lasterror;
DWORD bytes;
DWORD dwMilliseconds = 50;
int bAlertable = false;
unsigned retValue = 1;
while ( 1 )
{
SleepEx(dwMilliseconds, bAlertable);
fRead = ReadFile(Form1->hSerialPort, lpBuffer, BytesToRead, &bytes, &overlap);
lasterror = GetLastError();
if( !fRead && (lasterror == ERROR_IO_PENDING)) {
WaitForSingleObject(Form1->hSerialPort, INFINITE);
fRead = true;
}
if ( fRead ){
if(overlap.InternalHigh > 0) {
lpBuffer[overlap.InternalHigh] = '\0';
Form1->ListBox1->Items->Add(AnsiString(lpBuffer));
ActionFunc(lpBuffer);
}
}
else
{
ShowMessage("Íå ìîãó ÷èòàòü ñ COM ïîðòà");
retValue = 0;
break;
}
}
return retValue;
}

ПРОБЛЕМА — функция ReadFile ждет пока в файле не наберется 64 байта — BytesToRead, т.е. столько, сколько
я указал в ReadFile( , , BytesToRead, , ); и только после того как набралось BytesToRead завершается чтение,
необходимо чтоб ReadFile() читала размер BytesToRead либо если в файле меньше чем BytesToRead необходимо прочесть до конца файла.
P.S. скачал программку, ее китайцы за 25$ продают, так после запуска последней моя работает так как мне необходимо,
а после перезагрузки если запустить мою первой она работает так как я описал, т.е. ждет заполнния.....
.........подскажите.........