QLua + C#

Страницы: 1
RSS
QLua + C#, вызов методов с# из QLua
 
Здравствуйте. У меня такой вопрос: есть потребность вызывать методы c# класса из QLua. В какой-то степени удалось что-то сделать с помощью LuaInterface.dll и luanet.dll, которые как раз и предназначены для этого. Однако возникла такая проблема: почему-то методы вызываются, если они применяются  в main функции. Если же я вызываю экспортируемые методы из обработчиков событий, то ничего не происходит, как будто куска кода нет. Кто-то может сказать, в чем причина кроется? Насколько я знаю, обработчики и main функция крутятся в разных потоках, может это связано с этим? Вообще у кого-то есть успешный опыт использования c#, или подобные вещи стоит делать только через с api lua ?
 
Цитата
Дмитрий Сазонов пишет:
Здравствуйте. У меня такой вопрос: есть потребность вызывать методы c# класса из QLua. В какой-то степени удалось что-то сделать с помощью LuaInterface.dll и luanet.dll, которые как раз и предназначены для этого. Однако возникла такая проблема: почему-то методы вызываются, если они применяются в main функции. Если же я вызываю экспортируемые методы из обработчиков событий, то ничего не происходит, как будто куска кода нет. Кто-то может сказать, в чем причина кроется? Насколько я знаю, обработчики и main функция крутятся в разных потоках, может это связано с этим? Вообще у кого-то есть успешный опыт использования c#, или подобные вещи стоит делать только через с api lua ?
Верно. Проблема в двухпоточности. Эти библиотеки можно использовать только из того потока, в котором они созданы.

api lua, без вариантов
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru пишет:
api lua, без вариантов
ну-ну...
а вот разработчики (не буду тыкать пальцем...) - обернули всё это критическими секциями - и сидят умничают на сайте...
дальше сказать - не могу. бо как черевато...
 
честно сказать, меня уже забавляют такие вопросы: мол де. хАчу шарп но, нах мне ваше C API etc.
похоже уже выросло целое поколение C# :)))))

p.s. прежде чем браться подключать код сторонних библиотек/читай доверять им свой кошелёк - неплохо было бы в подробностях узнать весь механизм работы LUA...
 
Цитата
Дмитрий Сазонов пишет:
У меня такой вопрос: есть потребность вызывать методы c# класса из QLua.
в качестве одного из вариантов: вам надо создать наследника от класса на c# в котором вдобавок хранить Lua_State, далее в конструкторе шарп-ового класса - обернуть получившуюся приблуду в метатаблицу и работать с ней из QLUA - соответствующе. Все методы вашего шарп-ового класса - будут методами этой метатаблицы.
истинный геморрой - вы познаете когда вам захочется работать с событиями вашего класса на с#. Там уже будет всё далеко непросто.
 
Цитата
sam063rus пишет:
честно сказать, меня уже забавляют такие вопросы: мол де. хАчу шарп но, нах мне ваше C API etc.
похоже уже выросло целое поколение C# ))))

p.s. прежде чем браться подключать код сторонних библиотек/читай доверять им свой кошелёк - неплохо было бы в подробностях узнать весь механизм работы LUA...
Красавец, Страуструпа  c Саттером осил) Меня тоже забавляют персонажи: не знают, но уже ярлычки вешают.
 
Цитата
s_mike@rambler.ru пишет:
Цитата
Дмитрий Сазонов пишет:
Здравствуйте. У меня такой вопрос: есть потребность вызывать методы c# класса из QLua. В какой-то степени удалось что-то сделать с помощью LuaInterface.dll и luanet.dll, которые как раз и предназначены для этого. Однако возникла такая проблема: почему-то методы вызываются, если они применяются в main функции. Если же я вызываю экспортируемые методы из обработчиков событий, то ничего не происходит, как будто куска кода нет. Кто-то может сказать, в чем причина кроется? Насколько я знаю, обработчики и main функция крутятся в разных потоках, может это связано с этим? Вообще у кого-то есть успешный опыт использования c#, или подобные вещи стоит делать только через с api lua ?
Верно. Проблема в двухпоточности. Эти библиотеки можно использовать только из того потока, в котором они созданы.

api lua, без вариантов
Если михаил прав, то можно библиотеки C# открыть в потоке main.
Так как предпочитаю С и С++ вместо С#, то так не делал, это лишь предположение.
 
пардон, ошибся
хотел написать, что исполнение колбеков переместить в майн.
 
Спасибо все большое. за ответы.
 
Цитата
Дмитрий Сазонов пишет:
Цитата
sam063rus пишет:
честно сказать, меня уже забавляют такие вопросы: мол де. хАчу шарп но, нах мне ваше C API etc.
похоже уже выросло целое поколение C# ))))

p.s. прежде чем браться подключать код сторонних библиотек/читай доверять им свой кошелёк - неплохо было бы в подробностях узнать весь механизм работы LUA...
Красавец, Страуструпа c Саттером осил) Меня тоже забавляют персонажи: не знают, но уже ярлычки вешают.
 
Вечер добрый. Однако хороший вопрос вы подняли. А вы не поделитесь кусочком кода чтобы обновить память.
Был личный эксперимент года 2 назад. Остановился почти сразу, когда WinForms под Quik отказались выводиться. Далее доблестный C++ и IPC. Тут можно быть уверенным, что никаких сюрпризов потери времени на десериализации или маршаллизации не будет.
Вообще говоря, конечно, выглядит сложноватым вызов методов управляемого кода из QLUA. Переход через границу управляемого/неуправляемого кода самое дорогое удовольствие.
Вычислительные функции для  Qlua лучше написать на C/C++. Разница в производительности будет огромной по причине как раз названной границы. Ну, и не забывайте про про SIMD/AVX, которые в .Net 4.5 не доступны). Может, я немного ошибся. Но что-то подсказывает, что наиболее вероятно все именно так. Использование luanet представляется обоснованным только для передачи данных в C# приложение или наоборот получение от него команд (прямолинейно loadstring()), а, допустим выгрузку потока данных в обработчике событий терминала, но по-видимому C API.  В обоих случаях интересно, как физически реализуется взаимодействие и интересно будет сравнить C API / IPC .Net и способ реализации luanet.
 
Но при реализации C API / IPC .Net  luanet вряд ли понадобится. Плюс 50-250 строчек доблестного c++ вам должны доставить удовольствие. А также производительность по выше названным причинам .
Страницы: 1
Читают тему
Наверх