-
cId := CreateFile(PChar('COM'+IntToStr(Num)),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
SetCommMask(cId, EV_RXCHAR); Вот так было.
-
> PooHer (07.07.09 14:58) [20]
Работа с маской событий вообще не нужна, равно как и Wait/ClearCommEvent Равно как лишен смысла и overlapped ввод-вывод в доп.потоке, не делающем более ничего существенного, кроме собственно ввода-вывода из/в СОМ-порт
-
> Работа с маской событий вообще не нужна, равно как и Wait/ClearCommEvent
Ну а как тогда работать?
-
> PooHer (07.07.09 15:50) [22]
Если не нужна специфика работы с портом и подробная расшифровка специфичных ошибок, то достаточно ReadFile и WriteFile. Но настройка порта нужна.
-
> PooHer (07.07.09 15:50) [22]
Статьий глянь, их много в интернете. На королевстве дельфи посмотри, ссылки давал
-
Ну если просто вот так, в цикле сразу после передачи читать, должно работать? (Не смеяться, это просто в качестве эксперимента. procedure TForm2.Button4Click(Sender: TObject);
var
datas: string;
dwWrite: DWORD;
OverWrite: TOverlapped;
Buf: array[0..1] of Char;
dwRead, Read: DWORD;
i: integer;
begin
datas:='a';
OverWrite.hEvent := CreateEvent(nil, True, False, nil);
if OverWrite.hEvent = Null then
raise Exception.Create('Error creating write event');
if (not WriteFile(cId, datas, SizeOf(datas),
dwWrite, @OverWrite))
and (GetLastError <> ERROR_IO_PENDING) then
raise Exception.Create('Îøèáêà îòïðàâêè');
for i:=1 to 2000 do
begin
dwRead:=10;
buf:='0';
ReadFile(cId, Buf, dwRead, Read, nil);
if Buf[0] <> '0' then
panel1.caption:=string(Buf);
end;
end;
-
> PooHer (07.07.09 18:51) [25]
Не смеюсь.Нет, работать не будет. " В одну телегу впрячь не можно. Коня и трепетную лань." (с) А. С. Пушкин - это к тому, что есди ты используешь перектрытый ввод/вывод, открыл порт с флагом FILE_FLAG_OVERLAPPED, то и запись и чтение у тебя должны быть overlapped, а ты читать пытаешься синхронно. И потом, если ты делаешь overlapped(перекрытую) операцию ввода/вывода, то где -то и как-то надо получить и результат ее завершения - это значит использовать или GetOverlappedResult и/или WaitForSingleObject или WaitForMultipleObjects. И ты не читал статей ?
Прочитай, выбери один какой-то вариант работы и доводи его до ума. А то у тебя тут куча вариантов, все разные. И ошибки появляются снова и не уходят из-за этого.
-
> PooHer (07.07.09 18:51) [25]
Зачем тебе overlapped ввод-вывод ? Не нужен он тебе вообще. Не усложняй себе жизнь.
|