Форум: "WinAPI";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизИ снова про USB-COM и проблемы с ним... Найти похожие ветки
← →
GL00m (2006-07-18 00:34) [0]Вкратце: есть сотовый модем, цепляется на COM-порт, в системе не хватает портов, поэтому взял обычный переходник USB->COM. Читал в форуме, что проблем много и что не все режимы поддерживаются, но... Долбаный hyperterminal виндовый работает, а когда я пытаюсь сделать
ComPortHandle := CreateFile(PAnsiChar(ComPortName),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
где ComPortName = "COM15", то я получаю инвалидный хэндл с ГетЛастЕррором:The system cannot find the file specified
.
Я бы может и промолчал бы, но Гипертерминал-то пашет и все с ним работает. Может подскажете, где я лох (не считая того, что пользуюсь этим переходником =))?
← →
GL00m (2006-07-18 01:26) [1]Вот, извиняюсь, <плохое слово>!.. Проблему решил почитав MSDN из интернета, а не с диска. Цитата:
To specify a COM port number greater than 9, use the following syntax: "\\\\.\\COM10". This syntax works for all port numbers and hardware that allows COM port numbers to be specified.
Такого я раньше не видел, решение проблемы, соответственно, оказалось простым:if Length(ComPortName) > 4 then ComPortName := "\\.\" + ComPortName;
Может кому-то это пригодиться.
← →
GL00m (2006-07-18 01:27) [2]Пардон, ошибка - не "пригодиться", а "пригодится".
← →
artem1987 (2006-07-18 17:29) [3]var
SA : SECURITY_ATTRIBUTES;
s : string;
h : THandle;
begin
// формирование SA
SA.nLength:= SizeOf(SECURITY_ATTRIBUTES);
SA.lpSecurityDescriptor:= nil;
SA.bInheritHandle:= False;
...
s:=Format("\\.\%s:",[s[i]]);
h:= CreateFile(PChar(@s[1]),GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, @SA, OPEN_EXISTING, 0, 0);
...
end;
← →
StriderMan © (2006-07-18 18:55) [4]прочитайте внимательно
use the following syntax: "\\\\.\\COM10". This syntax works
for all port numbers and hardware that allows COM port numbers
to be specified.
...и скажите зачем делать такие проверки
> if Length(ComPortName) > 4 then ComPortName := "\\.\" +
> ComPortName;
← →
GL00m (2006-07-19 23:02) [5]Тогда я извиняюсь, мне, наверно, уже тогда в "начинающие"... Я просто не совсем понимаю, зачем "\\.\", ведь без этого не работает, а если номер меньше 10, то работает. Т.е. я просто пишу
CreateFile(PAnsiChar("COM1"), GENERIC_READ
итд итп и все работает, а если то же самое, но "COM15", то фигу. Расскажите, если не сложно? =(
← →
GL00m (2006-07-19 23:51) [6]Да... Раза с десятого я допер, что написано именно
for all port numbers
Короче, пихать эти непонятные слэши с точкой ко всем названием и будет мне счастье. Но все-таки интересно, что значит этот набор символов??? =)
← →
GL00m (2006-07-19 23:57) [7]to artem1987
А насколько это необходимо, прописывать SECURITY_ATTRIBUTES в данном случае?
FILE_SHARE_READ и WRITE мне не нужны из-за целей программы.
← →
Rouse_ © (2006-07-20 12:21) [8]Этот набор символов является именем устройства на локальной машине... (ибо точка)
← →
Anatoly Podgoretsky © (2006-07-23 13:41) [9]GL00m (19.07.06 23:02) [5]
Тогда я извиняюсь, мне, наверно, уже тогда в "начинающие"... Я просто не совсем понимаю, зачем "\\.\", ведь без этого не работает, а если номер меньше 10, то работает. Т.е. я просто пишу CreateFile(PAnsiChar("COM1"), GENERIC_READ итд итп и все работает, а если то же самое, но "COM15", то фигу. Расскажите, если не сложно? =(
Это означает доступ к физическому устройству, устройства 1-9 предопределенные с времен ДОС и поэтому указание \\.\ не является обязательным. Это относится не только к СОМ портам.
← →
GL00m (2006-07-26 00:40) [10]Спасибо, вроде дошло.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.067 c