Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

Чтение COM port под XP   Найти похожие ветки 

 
Сканер   (2007-03-22 09:38) [0]

ЧИтаю данные со сканера штрих кодов (CreateFile, ReadFile и пр.) На старом компе (win98) все здорово. Попробовал на новом (XP) - Get(Set)CommState,get(set)commtimeouts отрабатывают, а ReadFile пусто и всё. Куда копать?


 
Reindeer Moss Eater ©   (2007-03-22 09:41) [1]

getlasterror


 
Сканер   (2007-03-22 09:52) [2]

6


 
clickmaker ©   (2007-03-22 09:56) [3]

SysErrorMessage(GetLastError())
есть еще замечательная функция RaiseLastWin32Error, ну для любителей try except


 
Reindeer Moss Eater ©   (2007-03-22 09:59) [4]

6

Собственно вот тебе и ответ куда копать.


 
Kolan ©   (2007-03-22 10:07) [5]

> 6

Поток используешь? Что-то сним имхо, скореевсего он уже умер, а ты обращаешься&#133


 
Сканер   (2007-03-22 10:13) [6]

нет не потокб по таймеру читаю. считывания не часто случаются - всё без накладок работает в 98


 
Kolan ©   (2007-03-22 10:14) [7]

SysErrorMessage(GetLastError())
Вставь после каждого вызова API функции, погляди что получется.
Покажи код открытия порта и чтения&#133


 
Сканер   (2007-03-22 10:19) [8]

да всё по простому  
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 говорит неверный дескриптор


 
tesseract ©   (2007-03-22 10:23) [9]


> ReadFile(hCid,d,SizeOf(d),BytesRead,@ovr);


Ты порт открываешь в синхронном режиме, а читаешь в асинхронном. Что же ты хочешь?


 
clickmaker ©   (2007-03-22 10:31) [10]


> hCid:=CreateFile("\\.\COM1"

замени на CreateFile("COM1"


 
wal ©   (2007-03-22 10:36) [11]

>[10] clickmaker ©   (22.03.07 10:31)
Зачем?


 
Сканер   (2007-03-22 10:38) [12]

2tesseract
 как читать в синхронном?
 с портами не работал - больше с БД:)
 скопировал из примера где-то и в 98 работает нормально
2clickmaker
про \\.\COM1" и "COM1" написано в статье на главной странице


 
Сканер   (2007-03-22 10:56) [13]

туплю:)
всё разобрался. респект всем за помошь


 
clickmaker ©   (2007-03-22 11:12) [14]


> [11] wal ©   (22.03.07 10:36)

To specify a COM port number greater than 9, use the following syntax: "\\\\.\\COM10".
(с) MSDN

но, в общем, не принципиально, согласен. Там видимо дело было в overlapped



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

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

Наверх




Память: 0.49 MB
Время: 0.026 c
4-1174320505
Serega41
2007-03-19 19:08
2007.09.09
Как узнать открыто ли было устройство?


3-1178991672
TheEd
2007-05-12 21:41
2007.09.09
Как получить Description для полей (IB7.0, D7, FIBPlus)?


8-1165322703
Iv_
2006-12-05 15:45
2007.09.09
flash


1-1182844443
Makhanev Alexander
2007-06-26 11:54
2007.09.09
Пример батника для билдинга проектов...


15-1186810759
Cyrax
2007-08-11 09:39
2007.09.09
MySQL5: выполнение произвольного числа запросов без процедур...