Главная страница
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.025 c
9-1158998487
Новоуральск
2006-09-23 12:01
2007.09.09
Привет из Новоуральска:)


15-1187027189
Rouse_
2007-08-13 21:46
2007.09.09
Блин, ну до чего уже спамеров довели


8-1164092727
acyb
2006-11-21 10:05
2007.09.09
delphi + скриншот + белый экран


15-1186675833
kernel
2007-08-09 20:10
2007.09.09
Выбираем *nix ?!


15-1187106129
iZEN
2007-08-14 19:42
2007.09.09
Mdf2iso, есть ли аналоги iat.exe?