Форум: "WinAPI";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
ВнизЧтение 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
Поток используешь? Что-то сним имхо, скореевсего он уже умер, а ты обращаешься…
← →
Сканер (2007-03-22 10:13) [6]нет не потокб по таймеру читаю. считывания не часто случаются - всё без накладок работает в 98
← →
Kolan © (2007-03-22 10:14) [7]SysErrorMessage(GetLastError())
Вставь после каждого вызова API функции, погляди что получется.
Покажи код открытия порта и чтения…
← →
Сканер (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 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c