![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение COM port под XP [D7, Win95/98, WinXP]
Сканер © (2007-03-22 09:38:00)ЧИтаю данные со сканера штрих кодов (CreateFile, ReadFile и пр.) На старом компе (win98) все здорово. Попробовал на новом (XP) - Get(Set)CommState,get(set)commtimeouts отрабатывают, а ReadFile пусто и всё. Куда копать?
clickmaker (2007-03-22 11:12:00) [1]
> [11] wal © (22.03.07 10:36)
To specify a COM port number greater than 9, use the following syntax: "\\\\.\\COM10".
(с) MSDN
но, в общем, не принципиально, согласен. Там видимо дело было в overlapped
Сканер (2007-03-22 10:56:00) [2]туплю:)
всё разобрался. респект всем за помошь
Сканер (2007-03-22 10:38:00) [3]2tesseract
как читать в синхронном?
с портами не работал - больше с БД:)
скопировал из примера где-то и в 98 работает нормально
2clickmaker
про \\.\COM1' и 'COM1' написано в статье на главной странице
wal (2007-03-22 10:36:00) [4]>[10] clickmaker © (22.03.07 10:31)
Зачем?
clickmaker (2007-03-22 10:31:00) [5]
> hCid:=CreateFile('\\.\COM1'
замени на CreateFile('COM1'
tesseract (2007-03-22 10:23:00) [6]
> ReadFile(hCid,d,SizeOf(d),BytesRead,@ovr);
Ты порт открываешь в синхронном режиме, а читаешь в асинхронном. Что же ты хочешь?
Сканер (2007-03-22 10:19:00) [7]да всё по простому
hCid:=CreateFile('\\.\COM1',GENERIC_READ,0,NIL,OPEN_EXISTING,FILE_ATTRIBUTE_NORM AL,0);
SetupComm(hCid,256,256);
GetCommState(hCid,dcb);
dcb.BaudRate:=9599;
dcb.ByteSize:=8;
dcb.Parity:=NoParity;
dcb.StopBits:=onestopbit;
setcommstate(hcid,dcb);
getcommtimeouts(hcid,timeouts);
timeouts.ReadIntervalTimeout:=maxdword;
timeouts.ReadTotalTimeoutMultiplier:=0;
timeouts.ReadTotalTimeoutConstant:=0;
timeouts.WriteTotalTimeoutMultiplier:=0;
timeouts.WriteTotalTimeoutConstant:=0;
setcommtimeouts(hcid,timeouts);
а потом
ReadFile(hCid,d,SizeOf(d),BytesRead,@ovr);
после создания
SysErrorMessage(GetLastError()) - операция успешно завершена
а READ говорит неверный дескриптор
Kolan (2007-03-22 10:14:00) [8]SysErrorMessage(GetLastError())
Вставь после каждого вызова API функции, погляди что получется.
Покажи код открытия порта и чтения
Сканер (2007-03-22 10:13:00) [9]нет не потокб по таймеру читаю. считывания не часто случаются - всё без накладок работает в 98
Kolan (2007-03-22 10:07:00) [10]> 6
Поток используешь? Что-то сним имхо, скореевсего он уже умер, а ты обращаешься
Reindeer Moss Eater (2007-03-22 09:59:00) [11]6
Собственно вот тебе и ответ куда копать.
clickmaker (2007-03-22 09:56:00) [12]SysErrorMessage(GetLastError())
есть еще замечательная функция RaiseLastWin32Error, ну для любителей try except
Сканер (2007-03-22 09:52:00) [13]6
Reindeer Moss Eater (2007-03-22 09:41:00) [14]getlasterror