Register Event Callback

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Register Event Callback

Сообщение rushonda »

Добрый вечер. Помогите разобраться.
Есть dll на основе net.
она дает возможность выдавать какие-то команды.
Как сделать так, чтобы команда из dll срабатывала в event structure?
Смотрел встроенный пример регистрации события, Passing Data to a .NET Event Callback.vi, но там меняется параметр извне, а потом передается в dll.
А мне наоборот нужно, dll генерирует событие, и нужно его как-то отследить.
Копаю в сторону Register Event Callback.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Register Event Callback

Сообщение Artem.spb »

Копаете правильно, но по-моему без переделки dll не обойтись.
решение-заплатка: передать в dll в колбэк функцию-VI, который при вызове сгененрирует нужный user-event.
По крайней мере я нашёл только такой вариант в схожей задаче
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Register Event Callback

Сообщение rushonda »

dll генерит событие, только как в event структуре считать его? как код в смысле будут выглядеть при этом?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Register Event Callback

Сообщение Artem.spb »

http://zone.ni.com/reference/en-XX/help ... _ax_evnts/
если не получается, и dll не секретная, выкладывайте.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Register Event Callback

Сообщение dadreamer »

rushonda писал(а):dll генерит событие
DLL генерит событие КАК? Какая функция вызывается? Код DLL в студию. :rtfm:
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Register Event Callback

Сообщение rushonda »

Кода dll нет, но я на днях постараюсь уточнить у разработчика, как генерится событие.
По его словам генерится событие и нужно просто считать его в event structure. Только как на labview это сделать?
Passing Data to a .NET Event Callback.vi - по аналогии как-то?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Register Event Callback

Сообщение dadreamer »

rushonda писал(а):Только как на labview это сделать?
Passing Data to a .NET Event Callback.vi - по аналогии как-то?
Думаю, да. Но для уверенности хотелось бы поглядеть на саму библиотеку. Посмотрите вот эту тему: http://labviewportal.org/viewtopic.php? ... ack#p65828 Я там расписывал кратко, как работает пример Passing Data to a .NET Event Callback.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Register Event Callback

Сообщение rushonda »

dadreamer, сам код dll не уверен что дадут... в примере Passing Data to a .NET Event Callback событие срабатывает на изменение переменной knob, а как в event structure сделать срабатывание на изменение переменной в dll ? как мне говорят, в dll срабатывает событие типа true/false.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Register Event Callback

Сообщение dadreamer »

rushonda писал(а):как в event structure сделать срабатывание на изменение переменной в dll ? как мне говорят, в dll срабатывает событие типа true/false.
То есть, вы хотите сказать, что есть в DLL какая-то переменная, скажем, a = false, потихоньку помаленьку выполняется код, и в какой-то момент a ВНЕЗАПНО становится true, и вот этот самый момент вы хотите отловить? :shok: Если это на самом деле так (во что сложно поверить), то это невозможно. DLL должна по крайней мере как-то просигнализировать :labview: , что она поменяла состояние переменной - например, установив сигнал через функции WinAPI или запостив событие через PostLVUserEvent.

Вы можете выложить библиотеку + описание? Хотя бы без исходников.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Register Event Callback

Сообщение rushonda »

dadreamer, обещали прислать к понедельнику, сразу выложу
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Register Event Callback

Сообщение rushonda »

dadreamer, высылаю исходники.
в папке есть exe: CBackEvent\CBackEvent\bin\Debug\x86\CBackEvent.exe
если нажать старт происходят события. начало как я хотел сделать в скрине блок-диаграммы.
Вложения
CBackEvent-20180331.zip
исходники
(144.96 КБ) 192 скачивания
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Register Event Callback

Сообщение rushonda »

Кратенькая инструкция по программе
Запустить, нажать кнопку "Старт"
После этого в DLL запустится таймер с интервалом в 500мс и будет вызывать внутри DLL функцию, которая находится в основном коде [CBackEventMsg], передавая ей строку в качестве параметра
Эта функция из основного кода [CBackEventMsg] была объявлена в качестве параметра как функция обратного вызова и передана в DLL на этапе инициализации [oCBack.oev_Event += new Action<string>(CBackEventMsg)]
Нажатие кнопки "Стоп" останавливает таймер в DLL
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Register Event Callback

Сообщение dadreamer »

rushonda, DLL нормально написана. И в :labview: тоже всё прекрасно работает. Не знаю, с чем вы там не справились, я набросал код согласно стандартному примеру.
Вложения
oev_Event.rar
lv2014
(16.94 КБ) 189 скачиваний
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Register Event Callback

Сообщение rushonda »

dadreamer, спасибо, теперь хоть ясно стало. Просто реальная dll не генерит так часто события, поэтому я попросил написать аналогичную dll, которая генерит события чаще. Ранее так никогда не делал - обычно опрашивал просто и все.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»