|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от mazzy
Поддержки com-порта в стандартной Аксапте нет.
Рекомендация такая - пишите ActiveX (или ищите готовый) Далее, ActiveX с событиями можно вставить на форму и указать какой метод аксапты обрабатывает то или иное событие ActivX'а. Подробнее - руководство разработчика ключевое слово "Adding an ActiveX control to a form" Однако основная проблема всё равно остаётся открытой. Дело в том что обычные ActiveX контролы запускаются и целиком и полносью работают в рамках того же процесса и потока, в котором выполняется основная программа и поэтому никаких проблем не возникает - при возникновении Event-а метод его обработки работает как надо. Например, если я делаю ActiveX-control, который активирует внутри себя WinAPI-шный таймер (который выполняется в рамках очереди сообщений основного потока процесса), и в Event-е пишу print "Event" - всё работает замечательно - с периодичностью 1секунда в print window выводится эта строка. Тут же трудность состоит в том что объект драйвера выполняется в отдельном потоке и Event соответственно срабатывает в нём. А так как в это время сама аксапта может уже (и как правило так и происходит) заниматсься своими делами (реакцией на ввод, какие то внутренние циклы), то получается событие "вклинивается" в нормальный ход вещей совсем ненормальным образом. Например если я пишу в своём ActiveX контроле инициализацию thread-а, в котором периодически пытаюсь активировать Event - приложение рушится без лишних вопросов. Тут нужно сработать таким образом, чтобы активация событий была синхронизирована с работой основного кода аксапты. В 1С для этого специально был предусмотрен механизм внешних сообщений, вот я и подумал - а нет ли такого в аксапте тоже? Может можно хотя бы в основной поток GetMessage/DispatchMessage ложить свои сообщения? Можно конечно пойти по простому пути - не пользоваться событиями драйвера сканнера, а просто опрашивать его периодически (каждую секунду например) на предмет наличия введенных данных (при таком подходе даже ActiveX не потребуется), но хочется чтобы всё оптимально было. Впрочем возможно в аксапте, в отличие от 1С нет простого решения такой задачи... |
|