
12.07.2011, 08:56
|
 |
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;
__________________
Пишу программы за еду.
__________________
|