Показать сообщение отдельно
  #18  
Старый 12.07.2011, 08:56
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
if not WaitCommEvent(hPort, dwMask, @OverlapRead) then
if not ReadFile(hCom, Buf, dwRead, dwRead, @OverlapRead) then

Код:
function ReadCOM(HCOM: THandle; var Buffer; NumberOfBytesToRead: Cardinal): Integer;
var
  overlapped: TOverlapped;
  evtmask: Cardinal;
  numberofbytestransferred: Cardinal;
  errors: DWORD;
  stat: TComStat;
  numberofbytesread: DWORD;
  inque: Integer;
begin
  numberofbytesread:=0;
  ZeroMemory(@overlapped, SizeOf(TOverlapped));
  overlapped.hEvent:=CreateEvent(nil, True, False, nil);
  if not WaitCommEvent(HCOM, evtmask, @overlapped) then
  begin
    if (GetLastError=ERROR_IO_PENDING) and (WaitForSingleObject(overlapped.hEvent, INFINITE)=WAIT_OBJECT_0) then
      GetOverlappedResult(HCOM, overlapped, numberofbytestransferred, False);
  end;
  ClearCommError(HCOM, errors, @stat);
  inque:=stat.cbInQue;
  if inque>0 then
  begin
    inque:=Min(inque, NumberOfBytesToRead);
    ReadFile(HCOM, Buffer, inque, numberofbytesread, @overlapped);
  end;
  CloseHandle(overlapped.hEvent);
  Result:=numberofbytesread;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием