-
> Я просто пишу CreateFile и получаю сабж Я бы поступит так : - выкинул nrCommLib; - написал минимальный пример на чистом API, задействовав все маски;
см. SetCommMask с флагами EV_RXCHAR , EV_ERR и не только.
- смотрел что происходит через PortMon Опять таки не понятно, как ты работаешь с портом. Какие таймауты стоят на чтение ? Что происходит, когда данные не пришли и т.д.
-
Да че смотреть, я не могу порт открыть. CreateFile завершается ошибкой, буд-то я открываю не существующий порт.
-
> Да че смотреть, я не могу порт открыть.
Ну так это ж происходит не с первой попытки. А после каких-то действий, судя по описанию. Давай так. ПК перегрузил, подключил девайс, открываешь порт. Так открывается ?
-
Если так уверен в проблеме с usbser.sys. то посмотри на версию. Замени в конце-концов на другую ибо их несколько.
-
> Давай так. ПК перегрузил, подключил девайс, открываешь порт. > Так открывается ?
Открывается.
Дальше — вытащил USB.
Закрыл прогу.
Подключил USB.
Открыл прогу.
Шиш, не открывается.
-
> Открывается. Дальше — вытащил USB.Закрыл прогу.
Ну, а ты проверяешь результат CloseHandle при закрытии программы ? Там ведь, ты закрываешь порт ? Повторяю еще раз. Временно выкинь nrCommLib и напиши минимальный пример на API. Тогда все увидишь. И чем больше событий поставишь, тем быстрее разберешься. Я думаю, что при "вытащил" тебе должно прийти какое-то событие. В ответ на которые ты должен что-то сделать.
-
> CreateFile завершается ошибкой
Покажи всю ф-цию. Что в параметрах ? Там же есть флаги OPEN_EXISTING и т.д. Как работаешь с портом синхронно или асинхронно ?
-
> Их нету. Никаких китайских. На железке стоит USB разъем, > который (простите я дилетант) поддерживается самим процессором.
Нормальные процессоры работают по спецификации USB, а не преобразовывают USB в UART.
> Да че смотреть, я не могу порт открыть. CreateFile завершается > ошибкой, буд-то я открываю не существующий порт.
Судя по ранее сказанным твоим собственным словам ты пытаешься открыть не несуществующий порт, а занятый порт.
-
Ну и ещё.
> Kolan © (10.04.10 12:09) [19] > > > > Ты же вроде что-то пробовал с tpapro? > > На него забили, он странно подвисал при работе с зед-модемом. > Купили nrComm. > >
Если купили, то ... Сам догадаешься, что нужно сделать?
-
Вот код из писанного мной компонента: function TAnisochronousComm.Open: Boolean;
begin
Result := False;
if FPortHandle <> INVALID_HANDLE_VALUE then
Close;
FPortHandle := CreateFile(PWideChar('\\.\'+FPortName), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if FPortHandle = INVALID_HANDLE_VALUE then
Exit;
ZeroMemory(@FOverlappedRead, SizeOf(@FOverlappedRead));
ZeroMemory(@FOverlappedWrite, SizeOf(@FOverlappedWrite));
FOverlappedRead.hEvent := CreateEvent(nil, False, False, nil);
FOverlappedWrite.hEvent := CreateEvent(nil, False, False, nil);
SetUserComState;
SetUserComTimeOuts;
Purge;
Result := True;
SetEvent(FComOpenEvent);
end;
-
> Kolan © (15.04.10 09:42) [29]
CreateFile(PWideChar
В Delphi 6 в Windows.pas
> function CreateFile; external kernel32 name 'CreateFileA';
В этом случе PWideChar не уместен.
-
CreateFileW
-
Kolan © (15.04.10 09:42) [29] С открытием все в порядке. Что в SetUserComTimeOuts ? При запуске программы после перегрузки как ведет себя CloseHandle ? Результат проверяешь ?
-
> GanibalLector © (15.04.10 13:05) [32] > Kolan © (15.04.10 09:42) [29] > > С открытием все в порядке.
Возможно - правда в дельфи 6 это просто не компилируется. Но даже если и прошло , то я бы сделал тут хотя бы - if FPortHandle = INVALID_HANDLE_VALUE then begin raise Exception.Create(SysErrorMessage(GetLastError))); end; что бы точно знать причину ошибки.... И так же и в других проблемных местах.
-
Причем тут Д6? Я использую Д2009.
С открытием все в порядке. Ничего с ним не в порядке.
CreateFile возвращает INVALID_HANDLE_VALUE. Смысл обсуждать что-то еще?
-
Вот из nrComma код function OpenPort(const n:integer):THandle;
begin
Result:=CreateFile(PChar('\\?\'+ComPortToStr(n)),(GENERIC_READ + GENERIC_WRITE),0,nil,
OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
end; Разницы нет.
-
> Kolan © (15.04.10 15:00) [34] > Причем тут Д6? Я использую Д2009.
При том, что ты не указал версию и что прописано в твоей версии Windows.pas мне неизвестно. > Kolan © (15.04.10 15:02) [35]
> Разницы нет.
ПРоверь так и прочти что будет написано в сообщении if FPortHandle = INVALID_HANDLE_VALUE then
begin
raise Exception.Create(SysErrorMessage(GetLastError)));
end;
-
> При том, что ты не указал версию и что прописано в твоей > версии Windows.pas мне неизвестно.
Тогда логичнее было бы спросить вначале.
> ПРоверь так и прочти что будет написано в сообщении
Ведь в [0] это написано: „ Проблема в том, что при определенных действиях (гарантировано воспроизвести не удаётся, но это происходит при физическом отключении железки от порта) виртуальный ком-порт определяется в системе (виден в списке оборудование), а работать с ним не удается, функция открытия файла завершается с ошибкой «Не удается найти указанный файл.» “
-
> Kolan © (15.04.10 15:49) [37]
> Тогда логичнее было бы спросить вначале.
Нет, логичней было указать версию, ибо поставить галочку надо было при создании темы. Но не суть > Ведь в [0] это написано:
а вот это точно, просто тема так долго висела, что к сегодняшнему дню уже и забыл что было в начале - моя вина, сорри.
-
> С открытием все в порядке. Ничего с ним не в порядке.CreateFile > возвращает INVALID_HANDLE_VALUE. Смысл обсуждать что-то > еще?
Так сам же говорил, что проблема появляется только при повторном запуске программы, когда устройство вытащили из USB. Код, который ты привел абсолютно нормальный. И я так открываю. Я считаю, что проблема возникает при закрытии порта. Вот для примера. У тебя есть обычные порты (СОМ1,СОМ2)? Открой один из них в гипертерминале, а потом сам попробуй открыть программно. Так вот, не получится ибо он уже занят.
|