Главная страница
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
14-3095
Ciberrus
2003-05-14 09:31
2003.06.02
Где найти доку по ADO


4-3214
Axis_of_Evil
2003-04-02 10:10
2003.06.02
GetWindowInfo?


1-2921
Андрей
2003-05-23 09:11
2003.06.02
Как избежать такой ошибки? Abstract Error


6-3043
Budwaiser
2003-03-26 21:57
2003.06.02
Net Send


3-2747
AlexGreg
2003-05-13 12:57
2003.06.02
... Медленно встаёт ...