Вниз
Скачать: CL | DM;

Как правильно работать с COM портом через API?   Найти похожие ветки 

← →
JohnKorsh   (2003-03-31 12:10) [0]

Компилятор "не пропускает" API функцию
WaitCommEvent (hPort, EV_TXEMPTY, nil);
Указывает на EV_TXEMPTY и пишет, что Types of actual and formal var parametrs must be identical.
Все остальные функции API работают нормально.
Может кто подскажет ?
И ещё как грамотно очистить приёмный буфер COM?


← →
крот ©   (2003-03-31 13:04) [1]

Вторым параметром в WaitCommEvent обязательно должна быть переменная типа cardinal, содержащая код ожидаемого события
(в твоем случае - EV_TXEMPTY). Для очитки приемного буффера, используй PurgeComm


← →
pasha676   (2003-03-31 14:27) [2]

Я делаю примерно так

WaitCommEvent(port,Mask,@Ovr);
if (Mask and EV_TXEMTY)=EV_TXEMPTY then
begin
че надо
end;

Mask - DWord. Если внимательно почитать хелп по WaitCommEvent
то там имеем

LPDWORD lpEvtMask, // address of variable for event that occurred

Т.е. этот параметр не константа, а переменная.



← →
pasha676   (2003-03-31 14:29) [3]

Кстати Ovr - тоже переменная. Надо объявить и ее:

Ovr : TOverlapped;

Без нее не работает.


← →
крот ©   (2003-03-31 15:02) [4]


> pasha676 (31.03.03 14:29)
> Кстати Ovr - тоже переменная. Надо объявить и ее:
>
> Ovr : TOverlapped;
>
> Без нее не работает.


Работает и без нее. WaitCommEvent(hPort, Mask, nil);


← →
JohnKorsh   (2003-04-01 13:29) [5]

К сожалению, под W95, W98 функция WaitCommEvent(hPort, Mask, nil); с маской EV_TXEMTY работает правильно, а под W_2K и W_XP у меня почему-то не ждёт и, при частом обращении теряет символы, но нашёл как работает, поэтому отвечаю сам себе, может кому и пригодится:

procedure TMy_Com.putb_ex(b : byte;
var res :boolean);
{ Send one byte. }

var
stat : dword;
i : integer;

begin

res := True;

stat := 0;
i := 0;
While ((stat <> 1) and
(i < 1000)) do
begin
WriteFile(com,
b,
1,
stat,
nil);
i := i + 1;
end;

{ Когда передача не удалась из-за, например полного аппаратного буфера, stat не равен 1, пытаемся ещё 1000 раз, с защитой от зависания.}

end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
14-3163
Дмитрий К.К.
2003-05-15 05:43
2003.06.02
Именинники 15 мая


1-2936
Zilog
2003-05-20 10:42
2003.06.02
Вопрос по алгоритмам.


14-3130
RIMMER
2003-05-15 00:11
2003.06.02
www.win-x.net.ru


1-2962
Dracula2000
2003-05-21 10:01
2003.06.02
Главное окно...


3-2803
jen_bond
2003-05-14 19:25
2003.06.02
Database not assigned




   Наверх