Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.02;
Скачать: 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 вся ветка

Текущий архив: 2003.06.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-2863
sosv
2003-05-20 16:58
2003.06.02
Как отлаживать DLL?


14-3074
Edelweiss
2003-05-16 09:26
2003.06.02
Delphi & ArcView


3-2758
Alex(Lion)
2003-05-13 17:31
2003.06.02
Как на Label1.Capiton повесить количество записей в DBGrid1


6-3032
A.R.T.K.O.
2003-04-01 08:28
2003.06.02
Нужно сканировать доступность расшаренного ресурса в ЛВС. Как?


11-2835
Jazzy$
2002-09-05 20:15
2003.06.02
Как раскрасить ListView?