Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

COM порт [D7, Win95/98]


Страницы:   1 2

msd ©   (2005-05-25 11:28:00) 

нужно сделать так, чтоб прога запускала процедуру, как только в COM-порт поступает число (от штрих-код сканера). что-то типа "OnCOMPortChange". прога под Win95. вариант просмотра порта каждые 55msec (вроде это мин. для win95) - как-то глупо, тем более нет гарантии, что один и тот же товар не будет сканиться несколько раз подряд.
и что надо учесть при программировании проги в d7 для win95?
Спасибо большое!


Digitman   (2005-07-08 13:25:00) [1]


> автор не выводит никакого сообщения


с какого перепугу автор обязан что-то "выводить" тебе ?

автор вернул тебе булев результат коннекта, и тебе следует анализировать этот результат, прежде чем ничтоже сумняшеся пытаться что-то читать/писать из/в порт !


Digitman   (2005-07-08 13:18:00) [2]


> если есть прерывание от ком-порта


... то нефига туда лезть своими шаловливыми ручонками - ОС прекрасно и без тебя справится с обработкой прерываний... твоя же5 задача - ГРАМОТНО и ЭФФЕКТИВНО использовать WinAPI в части асинхронноговвода/вывода


> резидентная прослушка


где ты такой дурнопахнущей терминологии нахватался - "резидентная прослушка" ?

нет никаких "резидентных прослушек" !

есть Win32-процессы, любойиз которых является резидентным, и есть асинхронныйи синхронныйввод/вывод

а циклическое чтение данных из порта ввода - это и есть циклическое чтение данных из порта ввода, а не какая-то там "прослушка", тем более еще и какая-то там "резидентная")


> дальше всё "типа"


вот именно - "типа" !


msd   (2005-07-08 12:54:00) [3]

афтар сторонник русского языка.

simpson, лучше не рыдать, а подумать, что если есть прерывание от ком-порта, то резидентная прослушка - не лучший способ, и можно использовать это прерывание.

jack128, а кто мог открыть порт? в реестре, в device map, на com1 и com2 ничего не висит. может, другая причина? а если его кто открыл, то могу я узнать, можно ли его тоже пользовать? ну и, есстественно, попользовать порт?

автор не выводит никакого сообщения, и если хэндл окажется инвалид, то дальше всё "типа" работает, т.е. читаются и пишутся пустые строки, не зависимо от того, что на самом деле. Вот фрагмент TComportDriver'а

function TComportDriverThread.Connect: Boolean;
var
 comName: array[0..4] of Char;
 tms: TCommTimeouts;
begin
 if Connected then
   Exit;
 StrPCopy(comName,'COM');
 comName[3] := chr(ord('1') + ord(FComportNumber));
 comName[4] := #0;
 FComportHandle := CreateFile(comName,GENERIC_READ OR GENERIC_WRITE,0,nil,
                              OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 if not Connected then
   Exit;
 ApplyComPortSettings;
 tms.ReadIntervalTimeout         := 1;
 tms.ReadTotalTimeoutMultiplier  := 0;
 tms.ReadTotalTimeoutConstant    := 1;
 tms.WriteTotalTimeoutMultiplier := 0;
 tms.WriteTotalTimeoutConstant   := 0;
 SetCommTimeouts(FComportHandle,tms);
 Sleep(1000);
end;


Digitman   (2005-07-08 09:16:00) [4]


> msd


if not CommPortDriver.Connect then
 SysErrorMessage(GetLastError);

ЭТО ты мог бы и сам сообразить, заглянув в исх.текст метода Connect() и в справку !


jack128   (2005-07-07 23:57:00) [5]

msd ©   (07.07.05 20:13) [25]
я не спрашиваю про компоненту. я спрашиваю, почему её автор не "додумался" проверить

На автора не надо гнать, автор все проверяет.
function TCommPortDriver.Connect: boolean;
begin
...
 FHandle := CreateFile( pchar(FPortName),
                        GENERIC_READ or GENERIC_WRITE,
                        0, // Not shared
                        nil, // No security attributes
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL,
                        0 // No template
                       ) ;
 Result := Connected; (Connected := FHandle <> INVALID_HANDLE_VALUE)
 if not Result then
   exit


Это ТЫне удосуживаешься узнать, почему порт не открывается.

msd ©   (07.07.05 20:13) [25]
Код ошибки - 5 "The Request is known but currently can't be implemented" - что-то типа того написано в MSDN.


"Ты гонишь, Спидди" (по мотивам старого мультика)  
windows.pas
 { Access is denied. }
 ERROR_ACCESS_DENIED = 5;

Просто кто то уже открыл порт, вот ты и не можешь получить доступ к нему..


simpson   (2005-07-07 23:37:00) [6]

> msd ©   (26.05.05 13:25) [9]
> резидентная прослушка - это не тру программирование

Рыдал весь. :) Афтар жжот. :) Перевод этой фразы в студию!

> isasa ©   (25.05.05 17:51) [4]

Если уж созрел для того, чтобы помочь советом товарищу, то советуй хотя бы правильно. Проверять по таймеру наличие данных во входном буфере порта при живой функции WaitCommEvent по меньшей мере странно.

По сабжу. Если GetLastError, после того, как ты вызвал CreateFile, вернувщую INVALID_HANDLE_VALUE, вернула значение 5, то общественность требует привести ссылку из MSDN, где ты нашел это:

> The Request is known but currently can't be implemented

В разделе "Platform SDK: Debugging and Error Handling" написано, что код ошибки 5 - это "Access is denied.". Доступ запрещен.

Ну, и безусловно, хотелось бы код в студию.


msd   (2005-07-07 20:13:00) [7]

я не спрашиваю про компоненту. я спрашиваю, почему её автор не "додумался" проверить. дело не в компонентах. все они используют апишную функцию CreateFile. И вот она всегда возвращает инвалидный хэндл. Код ошибки - 5 "The Request is known but currently can't be implemented" - что-то типа того написано в MSDN.

А компоненты я смотрел для того, чтобы посмотреть, как это у других реализовано. И я ничего не спрашиваю о них у вас, не наезжаю на их авторов. Просто привожу информацию, т.к. мне кажется, что это часть моего вопроса.

Извините, если я опять написал чего не по сабжу.
Но, по-моему, тов Digitman и Германн со своими нравоучениями и нападками немного не в тему в форуме WinAPI.


Германн   (2005-07-07 01:05:00) [8]

С одной стороны - вопрос задан в форуме WinAPI.
С другой стороны автор сабжа пытается пользоваться компонентом TComPortDriver?

Не очень понятно, что автор хочет?
Может ли он использовать сторонние компоненты?
Может ли он использовать "условно-бесплатные" компоненты?

И еще к msd ©   (06.07.05 23:16) [23]
>А почему в компоненте TComPortDriver

А почему ты спрашиваешь об этом компоненте тут? Вопросы о нестандартных компонентах нужно адресовать автору.


msd   (2005-07-06 23:16:00) [9]

А почему в компоненте TComPortDriver не предусмотрен invalid_handle_value? И он даже не обрабатывает такой ситуации?
А по сабжу: пишет, что-то вроде "cannot open..." не помню точно.
Завтра точно посмотрю.


msd   (2005-07-06 23:12:00) [10]

спасибо большое, тов. Дигитмэн.


Digitman   (2005-07-04 14:33:00) [11]


> msd ©   (04.07.05 14:28) [20]
> справку я читать умею.


сомневаюсь.


> мне пофиг


чего ж тебе тогда набобно, старче, если тебе "пофиг" ?


> Мне нужен валид, ВСЕГДА


нужен ? получи !

не получил ? УЗНАЙ, олух, ПОЧЕМУ ты его не получил ! На то и GEtLastError существует ! И не для Пушкина он существует, а для тебя, олуха !


msd   (2005-07-04 14:28:00) [12]

справку я читать умею.
и мне пофиг, почему хэндл инвалид.
Мне нужен валид, ВСЕГДА.


Digitman   (2005-07-04 09:08:00) [13]


>  на моём компе .. handle всегда invalid



> что делать?


читать справку, где черным по белому написано :

If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.


msd   (2005-07-03 15:15:00) [14]

с CreateFile тоже всё круто, все компоненты типа async32, TComPortDriver так работают, тока на моём компе (winXP, на других не пробовал) handle всегда invalid. В TComPortDriver такая ситуация даже не обрабатывается! Т.е. хэндл инвалид, а прога типа подключилась и типа работает. Ну и что делать? поможите,а?


Reindeer Moss Eater   (2005-05-30 11:22:00) [15]

Он высосал это из пальца


msd   (2005-05-30 11:12:00) [16]

2 Marser
мне тоже интересно, какое, но ведь всё может быть. мне такое сказал один программист, не просто ж он языком трепал. но для корректного вывода надо обоснованное мнение многих


Marser   (2005-05-29 13:06:00) [17]


> msd ©   (29.05.05 12:37) [14] [Новое
>сообщение][Ответить]
> не знаю, почему нет, но слышал мнение, что не будет.

Какое отношение разрядность имеет к ОС?


msd   (2005-05-29 12:37:00) [18]

не знаю, почему нет, но слышал мнение, что не будет.


Marser   (2005-05-29 01:08:00) [19]


> msd ©   (27.05.05 17:52) [11] [Новое
>сообщение][Ответить]
> Кстати, а win95 будет корректно с int64 работать?

А почему нет?


Reindeer Moss Eater   (2005-05-27 17:54:00) [20]

очень смешно


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо