опять про com порты

marinius
Дата: 28.11.2007 12:58:38
Здравствуйте. О наболевшем: не могу отправить на com порт строку. Вообще сама задача более сложная чем я сейчас обрисую, но я не могу выполниь даже элементарной простой вещи, поэтому обращаюсь за помощью к вам, из соображений: "от простого к сложному". К компу подключён телефон. Создала HyperTerminal (COM10), послала на телефон строку 'at+cmgs=42', нажала enter, получила ответ-приглашение ">". Теперь хочу послать на этот же телефон через порт COM10 ту же самую строку. Фрагмент кода:
Stroka := 'at+cmgs=42'+#13+#10;
 PortInit;
где portInit - процедура, оговорюсь, что идея взята с сайта "Мастера Делфи", ссылка:
[url=http://]http://www.delphimaster.ru/articles/comport2/index.html#PageTop[/url]

В моём случае она выглядит так:
Procedure PortInit;
var
  ThreadID:dword;
begin
   CommHandle:=CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,NIL,OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL OR FILE_FLAG_OVERLAPPED,0);
   Win32Check(CommHandle <> INVALID_HANDLE_VALUE);
   SetCommMask(CommHandle,EV_RXFLAG);
   Win32Check(SetCommMask(CommHandle,EV_RXFLAG));
   GetCommState(CommHandle, dcbPort);
   Win32Check(GetCommState(CommHandle, dcbPort));
   dcbPort.BaudRate := 9600;
   dcbPort.ByteSize := 8;
   dcbPort.Parity   := NOPARITY;
   dcbPort.StopBits := ONESTOPBIT;
   DcbPort.EvtChar := chr(62);//должны получить приглашение в виде ">"
   SetCommState(CommHandle, dcbPort);
   Win32Check(SetCommState(CommHandle, dcbPort));
   CommThread:=CreateThread(nil,0,@ReadComm,nil,0,ThreadID);
end;
На строке: Win32Check(SetCommMask(CommHandle,EV_RXFlag)); выдаёт ошибку см. вложение
Подскажите пожалуйста как исправить ошибку? Ну где же всё-таки собака зарыта?
Den!
Дата: 28.11.2007 13:16:57
Я делаю так:

  FHandle := CreateFile(PChar('\\.\COM10'), (GENERIC_READ or GENERIC_WRITE),
                        0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
Den!
Дата: 28.11.2007 13:18:28
И кстати, у тебя в CreateFile строка 'COM1', а телефон вроде как на COM10 ;)
smskin
Дата: 28.11.2007 13:22:17
Насколько я помню, чтобы окрывать порты выше 8 надо имя порта указывать как "\\.\COM10" например
smskin
Дата: 28.11.2007 13:23:59
а флаг FILE_FLAG_OVERLAPPED - не лишний? действительно в overlapped режиме из порта хочешь данные считывать?
marinius
Дата: 28.11.2007 13:24:10
Den!
И кстати, у тебя в CreateFile строка 'COM1', а телефон вроде как на COM10 ;)

ну это опечатка, если честно, в проге везде com10, я пока сообщение сочиняла, может где затёрла
marinius
Дата: 28.11.2007 13:30:37
smskin
Насколько я помню, чтобы окрывать порты выше 8 надо имя порта указывать как "\\.\COM10" например

УРА!!!! так пошло, пойду дальше... Вам и Den! - у отдельное спасибо!!! :)
smskin
Дата: 28.11.2007 13:37:39
marinius
smskin
Насколько я помню, чтобы окрывать порты выше 8 надо имя порта указывать как "\\.\COM10" например

УРА!!!! так пошло, пойду дальше... Вам и Den! - у отдельное спасибо!!! :)
Кстати, так можно все порты открывать, а не только выше 8.