Текущий архив: 2004.05.30;
Скачать: CL | DM;
Внизработа с портом(232) через DLL и COM .Почему??? Найти похожие ветки
← →
Talla2k © (2004-04-26 17:06) [0]Проблема такая:
в программе необходимо обращаться к порту(232) через мою dll и через вражеский COM обьект.
Написал.Работает,НО!!!
если после работы с вражеским COM обьектом я вызываю свою DLL,то не приходит ничего...(из порта 232)
Причем,COM обьект после работы закрываю,более того PortMon тоже говорит,что порт(232) закрывается как после работы COM обьекта
так и после вызова моей DLL.
Вот,даже решил выложить мониторинг порта (может так понятней будет...)
ЭТО ЧЕРЕЗ ВРАЖЕСКИЙ COM-Обьект
IRP_MJ_CREATE Options: Open
IOCTL_SERIAL_SET_QUEUE_SIZE InSize: 1024 OutSize: 4096
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_SET_BAUD_RATE Rate: 38400
IOCTL_SERIAL_CLR_RTS
IOCTL_SERIAL_CLR_DTR
IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
IOCTL_SERIAL_SET_CHAR EOF:0 ERR:0 BRK:0 EVT:d XON:11 XOFF:13
IOCTL_SERIAL_SET_HANDFLOW Shake:80000000 Replace:80000003 XonLimit:512 XoffLimit:20
IOCTL_SERIAL_SET_TIMEOUTS RI:25 RM:0 RC:5000 WM:0 WC:0
IOCTL_SERIAL_SET_DTR
IOCTL_SERIAL_SET_RTS
IOCTL_SERIAL_PURGE Purge: TXABORT
IOCTL_SERIAL_PURGE Purge: TXCLEAR RXCLEAR
IOCTL_SERIAL_GET_COMMSTATUS
IRP_MJ_READ Length 6: 1B 61 A0 1B 61 80
IRP_MJ_READ Length 3: 1B 61 80
IRP_MJ_WRITE Length 1: 11
IRP_MJ_WRITE Length 2: 1B 41
IOCTL_SERIAL_PURGE Purge: TXABORT
IOCTL_SERIAL_PURGE Purge: TXCLEAR RXCLEAR
IOCTL_SERIAL_GET_COMMSTATUS
// ну...там,дальше обмен пошел
IRP_MJ_CLEANUP
IRP_MJ_CLOSE
А ЭТО ВЫЗОВ МОЕЙ DLL,после работы вражеского COM-обьекта
(напомню,если не вызывать вражеский COM-обьект,то все работает...)
IRP_MJ_CREATE Options: Open
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_GET_BAUD_RATE
IOCTL_SERIAL_GET_LINE_CONTROL
IOCTL_SERIAL_GET_CHARS
IOCTL_SERIAL_GET_HANDFLOW
IOCTL_SERIAL_SET_BAUD_RATE Rate: 38400
IOCTL_SERIAL_CLR_RTS
IOCTL_SERIAL_CLR_DTR
IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
IOCTL_SERIAL_SET_CHAR EOF:0 ERR:0 BRK:0 EVT:d XON:11 XOFF:13
IOCTL_SERIAL_SET_HANDFLOW Shake:80000000 Replace:80000003 XonLimit:2048 XoffLimit:512
IOCTL_SERIAL_SET_TIMEOUTS RI:-1 RM:0 RC:0 WM:0 WC:0
IOCTL_SERIAL_SET_WAIT_MASK Mask: RXFLAG RLSD
IOCTL_SERIAL_PURGE Purge: TXCLEAR
IOCTL_SERIAL_PURGE Purge: RXCLEAR
IOCTL_SERIAL_SET_TIMEOUTS RI:0 RM:25 RC:100 WM:0 WC:0
IOCTL_SERIAL_PURGE Purge: TXCLEAR
IOCTL_SERIAL_PURGE Purge: RXCLEAR
IOCTL_SERIAL_PURGE Purge: TXABORT
IRP_MJ_READ Length 0:
// вот,ничего не приходит...
IRP_MJ_READ Length 0:
IRP_MJ_READ Length 0:
IRP_MJ_READ Length 0:
// ну ... и так далее
IRP_MJ_CLEANUP
IRP_MJ_CLOSE
Не могу понять в чем дело...
Вроде и сброс делаю в начале работы (PurgeComm) и закрываю все(closehandle)
← →
tesseract © (2004-04-26 19:08) [1]Судя по всему вражеский объект handle не осовобождает. А логи, если не вызывать объект отличаются???? Может он меняет настройки порта. - У тебя например не выставлен размер буфера приёма/передачи.
← →
Talla2k © (2004-04-26 20:21) [2]>Судя по всему вражеский объект handle не осовобождает.
А как проверить???Сказать честно,ДОЛЖЕН освобождаться.Ведь все действия у меня в потоке и когда поток заканчивается,то он все сам мочит...
>А логи, если не вызывать объект отличаются????
Не понял вопроса.
>У тебя например не выставлен размер буфера приёма/передачи.
Не,это не из-за этого.100%
← →
Jack128 © (2004-04-26 20:40) [3]
> А как проверить???
у тя в dll порт открывается? Если да, то вражий ком объект порт отпускает..
← →
Talla2k © (2004-04-26 20:44) [4]>у тя в dll порт открывается? Если да, то вражий ком объект порт отпускает..
Да,конечно...Ведь я даже лог монитора выложил.
← →
Jack128 © (2004-04-26 21:02) [5]
> Talla2k © (26.04.04 20:44)
угу - туплю.
а асцилогрофом не пытался проверить реально в порт приходит что нить?
← →
Talla2k © (2004-04-26 21:58) [6]Короче,всем спасибо разобрался.
Оказывается ВРАЖЕСКИЙ COM обьект посылал XOFF и соответственно устройство молчало.Сделал XON из своей DLL и все заработало.
НО,рву себе волосы на лоб... ПОЧЕМУ,PORTMON промолчал???Ведь если посылается XOFF ,то при повторном вызове COM-обьекта ОН ПРОСТО ОБЯЗАН послать XON что-бы устройство разморозилось.(а он не посылает)
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.047 c