16.06.2004, 20:47 | #1 |
Участник
|
Обработка событий в Аксапте
Может кто-нибудь имеет опты по обработке системных событий в Аксапте!! Был-бы рад услышать советы на данную тему!
|
|
17.06.2004, 10:39 | #2 |
Moderator
|
Боюсь, что это не возможно.
Обработать системные события можно либо подменив оконную процедуру Аксапты, либо субклассингом. Я не видел в X++ возможностей не для того, ни для другого. Хотя, технически, если бы разработчики Аксапты хотели бы дать такую экзотическую возможность - думаю это можно было бы реализовать. Например создав callback функции для каждого из событий. Если не секрет, какое из событий Вы хотите обработать и зачем Вам это нужно ? |
|
17.06.2004, 11:05 | #3 |
Участник
|
Цитата:
Если не секрет, какое из событий Вы хотите обработать и зачем Вам это нужно ?
|
|
17.06.2004, 11:14 | #4 |
Moderator
|
Не фига не стало ясно.
Цитата:
Рассказываю!! Есть некое оборудование, которое подключается к ПК!) Это оборудование генерит некое событие (прерывание)! Мне нужно его в Аксапте обработать!!
Какие события оно генерит ? И вообще - события это или прерывания ? Хотя могу предложить универсальное решение - можно реализовать промежуточный слой на одном из системных языков программирования (C++, Delphi и.т.д.) Суть этого слоя - перехват "события" от Вашего оборудования и в ответ на это событие вызов метода Аксапты через COM интерфейс. В принципе, этот промежуточный слой можно реализовать в виде dll или activeX и использовать прямо в Аксапте. Останется только проблема с развертыванием. |
|
17.06.2004, 11:22 | #5 |
Участник
|
Цитата:
Хотя могу предложить универсальное решение - можно реализовать промежуточный слой на одном из системных языков программирования (C++, Delphi и.т.д.)
А оборудование до боли просто: сканер штрих-кода!! |
|
17.06.2004, 11:27 | #6 |
Moderator
|
Еще раз - как подключается оборудование ?
Через COM порт ? Со сканерами штрих-кодов не работал, но с кассовыми аппаратами идет такая вещь, как драйвер - хотя это тоже промежуточное звено, за которым нужно следить, чтобы он был установлен у пользователя. Пока Вы не скажете более подробную информацию о том, какие события(прерывания) генерит Ваше оборудование - вам вряд ли кто-то поможет. p.s. Вообще под системными событиями в Windows понимаются константы WM_*, которые определены в файле windows.h. Но как я понял, у Вас все-таки нечто иное |
|
17.06.2004, 11:31 | #7 |
Участник
|
Сканер подключается через COM-порт. И мне необходимо при сканировании штрих-кода на упаковке получить этот код в поле формы Аксапты!
|
|
17.06.2004, 11:32 | #8 |
Модератор
|
Dll однозначно. Хотя Axapta, по идее, могла бы понимать такую штуку и сама. Handle'ров нет, напрямую порт хоть и откроешь, но нет доступа к более специфическим функциям (SetCommSpeed, SetCommTimeOut,..) так привычных в C++... Кстати, у меня есть утилита для трансляции из COM в разрыв клавиатуры, но это не выход - криво уж очень...
А чей сканер-то? Metrologic, Symbol, CipherLab, HPP? |
|
17.06.2004, 11:49 | #9 |
Moderator
|
Цитата:
Сканер подключается через COM-порт.
ОК. Шансов не много, но попробовать можно. Дело в том, что в Windows с COM портом можно работать так же, как и с обычным файлом - через api функцию CreateFile. Однако есть несколько неприятных моментов: 1) CreateFile реализованная в классе WinApi Вам не подходит. Вот ее обертка в Аксапте: PHP код:
Цитата:
hCom = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE, 0, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING 0, // not overlapped I/O NULL // hTemplate must be NULL for comm devices ); Так что нужно будет реализовать свою версию WinAPI::CreateFile 2. Нужно будет создать свои обертки вокруг API функций GetCommState и SetCommState. 3. Может еще что-то забыл. p.s. Сам бы я поставил драйвер (или любое другое промежуточное ПО и не мучался). |
|
17.06.2004, 11:53 | #10 |
Moderator
|
Цитата:
Handle'ров нет, напрямую порт хоть и откроешь, но нет доступа к более специфическим функциям (SetCommSpeed, SetCommTimeOut,..) так привычных в C++...
CreateFile как раз handle и возвращает. А параметры устройства, как я понимаю можно не определять - Vasilenko Alexsandr их должен знать. Достаточно будет задать их как константы: PHP код:
|
|
17.06.2004, 11:54 | #11 |
Модератор
|
PHP код:
|
|
17.06.2004, 12:09 | #12 |
Модератор
|
Да, дело в том, что, когда я писал компоненты для работы с подобного рода аппаратурой, (Сканеры, принтеры шк, теминалы), мне приходилось использовать OVERLAPPED.. Хм... что-то вроде..
PHP код:
Все это в отдельном потоке крутилось, разумеется.. |
|
17.06.2004, 12:12 | #13 |
Модератор
|
Просто сечас под рукой ничего более приличного нет... Это что-то из старого.. Но, надеюсь, принцип понятен. В Axapte есть, в принципе, потоки... TutorialThread и все такое... но реально не работал, так что не скажу.
В документации - только 1 упоминание о сканере (в торговле и логистике). И то, судя по всему, клавиатурного |
|
17.06.2004, 12:16 | #14 |
Участник
|
Уважаемые господа!! Это все хорошо и понятно!! Работать с COM-портом Аксапта может, ура!! Но здесь вожен еще один момент, в Аксапте нужно организовать механизм беспрерывного опроса СOM-порта, чтобы пользователь не сидел и не ждал пока информация из СOM-порта соблаговолит попасть к нему в окно. Здесь важно, что Аксапта среагировала именно в тот момент, кода код считался с помощью сканера!
|
|
17.06.2004, 12:24 | #15 |
Moderator
|
Думаю мы убедили Vasilenko Alexsandr - использовать промежуточное ПО
Хотя, если есть куча свободного времени - почему бы и не попробовать |
|
17.06.2004, 12:25 | #16 |
Модератор
|
Александр! Так о том и речь, что невозможно открыть СОМ-порт, используя
OVERLAPPED!! т.е, что бы предыдущий пример заработал, надо, кроме того, что бы поместить его в отдельный поток, еще и открыть порт примерно таким образом: PHP код:
Я, в принципе, знаю, что куда надо записать.... UART он во всем мире одинаков т.е. как в регистрах UART выставить соответствующие значения? 0011001 (то, что, в принципе и делает SetCommState) |
|
17.06.2004, 12:26 | #17 |
Участник
|
Цитата:
Все это в отдельном потоке крутилось, разумеется..
Как можно рабоать с несколькими потоками в Аксапте, как организвать работу в разных потоках??! |
|
17.06.2004, 12:28 | #18 |
Moderator
|
Цитата:
Работать с COM-портом Аксапта может, ура!!
Цитата:
Как можно рабоать с несколькими потоками в Аксапте, как организвать работу в разных потоках??!
|
|
17.06.2004, 12:30 | #19 |
Участник
|
2 George Nordic: Вы опережаете мои вопросы, спасибо!! Я за Вами не успеваю!!
|
|
17.06.2004, 12:33 | #20 |
Модератор
|
Цитата:
Изначально опубликовано Андре
Думаю мы убедили Vasilenko Alexsandr - использовать промежуточное ПО Хотя, если есть куча свободного времени - почему бы и не попробовать Полностью с Вами согласен! Александр, эксперементируйте! Только не забудьте поделиться с общественностью Я могу дать пример кода... Хотя, я думаю, на всяких OpenSource'ax их тоже хватает. В любом случае, инструмент для работы с СОМ-портом из Axapta - хорошая штука. Кстати, всякие коммерческие Dll - редкая дрянь (по крайней мере 2 года назад так оно и было).. Черт! Да у меня же своя где-то есть!!! Как раз для работы с торговым оборудованием всяким.. Ох.. надо дома в архивах порыться... а, может, и выложена где на www.CihperLab.ru Удачи! С Уважением, Георгий. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|