Блог им. Sergey_Gavrilov

Он сказал, 'си', она пискнула, "луа, луа", он прошипел, 'шарп'

Луакнутые и сишарпнутые братья объясните убогому можно ли скрестить бульдога с носорогом при помощи LuaInterface или NLua, чисто теоретически я никаких проблем не вижу, но может уже кто уже наткнутся на «подводные камни»
Нашел тут хороший сайт quikluacsharp.ru/... Там меня напугали с аж с двумя плюсами…
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
  • Ключевые слова:
  • lua,
  • qlua
330 | ★8
36 комментариев
SiLuaNov
avatar
Зачем вам нужен шарп? Какой-то непонятный язык...

QLUA тем и хорош, что позволяет в LUA реализовать интерфейс взаимодействия с биржей (выставление, снятие заявок, получение истории из примерно 3000 свечей, и т.д.), а «движок» стратегии упаковать в C++ и приаттачить dll
Евгений Гуревич, Вы правы, не стоит городить огород. В крайнем случае лучше обойтись C++.
avatar
Scorpio, верно, можно и целиком на LUA, но я суеверно придерживаюсь убеждения, что машинный код работает быстрее, чем транслятор LUA. В домашних условиях это не даёт преимущества, но всё же…
Евгений Гуревич, нашёл автору решение. Но стоит так заморачиваться при условии, что на C#, реально что-то сильное реализовано.
avatar
Scorpio, не надо мне ничего сильного… Нужна тупая «обертка» чуть ли не в ноль повторяющая qlua, но на с#.., обертку сам сделаю, вопрос в технологиях…
Евгений Гуревич, Евгений все в конце концов будет машинным кодом..., но пока до этого дойдет, срипт сначала будет гусеницей и только потом бабочкой… Так как quik нам поставляет только гусениц, то какая нахер разница…
Scorpio, «В крайнем случае лучше обойтись C++.»

это все равно что сказать, что «бегемот больше гиппопотама.»


Это два практически идентичных по синтаксису языка С++ и С#.


С# в алго применяется чаще, к нему больше библиотек прилагается чем к С++.
Это не в укор LUA. LUA это более высокоуровневый язык, ближе к скриптам…
avatar
dagh, языки синтаксис похож, но как язык c# ближе к vb.net, т.к., что там нет, что здесь нет..., а где же «да»...?
Если я правильно понял, то Вам нужна библиотека на C++, которую вы импортируете из Lua, а потом через именованную память ваша библиотека будет обмениваться данными с C# приложением.
Взял от сюда
quikluacsharp.ru/qlua-c-cpp-csharp/konnektor-dll-quik-qlua-lua-c/
и от сюда
quikluacsharp.ru/qlua-c-cpp-csharp/obmen-dannymi-mezhdu-dll-c-c-i-prilozheniem-c/
avatar
Scorpio, неправильно, я хочу, чтобы опоненты обоснованно  LuaInterface(NLua) с дерьмом смешали…
Сергей Гаврилов, Вы сами сказали у Вас богатый опыт в C#, пользуйтесь им.
avatar
 Автор, на C# что за код у Вас?
avatar
Scorpio, У автора перерыв на reloading
avatar
Scorpio, хороший
Ещё как вариант сразу писать библиотеку на C# с экспортом функции.
jonxxx.me/13-metatrader/15-eksport-funktsij-iz-net-dll-c-dllexport-net-framework-v-metatrader
avatar
Scorpio, этот вариант я знаю… В принципе неплохой… Но, блин, в русскоязычной студии не компилится…
Сергей Гаврилов, Покажите лог.
avatar
Scorpio, чей?

Сергей Гаврилов, Компиляции в русскоязычной студии.
avatar
Scorpio, вот такая ошибка копиляции

Ошибка C:\Users\Sergey\AppData\Local\Temp\tmp9569\Synapse.CSLua.il(66): error: syntax error at token '.method' in: .method public hidebysig specialname rtspecialname Synapse.CSLua

Сергей Гаврилов, Нашёл решение проблемы. Вам нужно изменить язык для приложений которые не поддерживают юникод на английский и перезапустить систему.

oxozle.com/2014/07/02/kak-izmenit-yazyk-dlya-ne-unicode-programm-v-windows-8
avatar
Scorpio, спасибо большое..., все откомпилилось… Только язык я не на Русский, а на Английский поменял... 

//=== Реализация функций, вызываемых из LUA ====================================================================//
static int forLua_TestFunc(lua_State *L)// Возвращает заданный текст
{
lua_pushstring(L, «Привет из C/C++»);
return(1);
}


//=== Регистрация реализованных в dll функций, чтобы они стали «видимы» для Lua ================================//
static struct luaL_reg ls_lib[] = {
{ «TestFunc», forLua_TestFunc }, // из скрипта Lua эту функцию можно будет вызывать так: QluaCSharpConnector.TestFunc(); здесь можно указать любое другое название
{ NULL, NULL }
};

//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern «C» LUALIB_API int luaopen_QluaCSharpConnector(lua_State *L) {
luaL_openlib(L, «QluaCSharpConnector», ls_lib, 0);
return 0;
}


Тут ещё инициализация. Если не разбираться в интерфейсе, то лучше импортировать С++ DLL из примера, далее в этой же DLL импортировать свои функции из C# библиотеки.
avatar
"Он сказал - поехали, он взмахнул рукой,
Словно вдоль по Питерской, Питерской
Пронёсся над Землёй.
Словно вдоль по Питерской, Питерской
Пронёсся над Землёй.

Знаете, каким он парнем был,
Как поля родные он любил.
В той степной дали первый старт с Земли,
Был признаньем ей в любви.

Он сказал - поехали, он взмахнул рукой,
Словно вдоль по Питерской, Питерской
Пронёсся над Землёй.
Словно вдоль по Питерской, Питерской
Пронёсся над Землёй."<br><br>https://www.youtube.com/watch?v=sMeOrfu6f8U
avatar
Мужики, я еще праздную, потому добрый… Профессионально пишу на .net уже много лет. Сравнивать возможности с# c lua просто несерьезно — вещи несравнимые, посему нужна оболочка...
Я не уверен, что прослойка из с++ API лучше, чем LuaInterface(NLua)… Хочу, чтобы мне доказали обратное...  
Сергей Гаврилов, Пожалуйста, делайте, на C++ есть пример.
Большой опыт — существенная причина. Вперёд!
avatar
Кстати, еще один довод в пользу c# в том, что я хотел бы к скриптам прикрутить нормальный UI на wpf, а также альтернативный вариант построения графиков… Например, сейчас в Квике нельзя использовать свечи типа range,  кластерные свечи и т.п.
И я не хочу «коннектор»,  который использует другое приложения. Хочу, чтобы «точкой входа» был скрипт... 
Сергей Гаврилов, думаю, Вам сюда: https://github.com/finsight/QuikSharp

avatar
Сергей Гаврилов, А вы знаете, что скрипт работает в разных потоках и эти потоки не основные. Поэтому прикручивая UI на с# к lua скрипту вы можете получить массу глюков. Форма то будет крутиться не в основном потоке квика.
Так что лучше передавать данные из квика в свое собственное приложение.
Можно писать приложения на с#, для этого есть несколько вариантов:
1. Создать таблицу экспортов в dll на c#. Но есть одно, но — передача параметров в lua api происходит по типу с. Это надо учесть. Утилиту github.com/Jonxxx/ExportDll можно переделать тут.
а так почитать эту тему jonxxx.me/13-metatrader/15-eksport-funktsij-iz-net-dll-c-dllexport-net-framework-v-metatrader
Там есть моя утилита, но она конвертацию параметров делает по умолчанию stdcall (https://yadi.sk/d/E1x2KDeLjniVB)
2. Написать переходник на с++, как собственно делается в разного рода LuaInterface. В этом переходнике создавать классы на с# и вызывать нужные функции.
avatar
Александр, спасибо… Но с wpf в скриптах мне интересно покопаться… Да поможет мне dispatcher…
Сергей Гаврилов, Я бы на вашем месте реализовал бы по другому. Написал бы на си++ передачу данных в приложение с# через файловый меппинг или пайпы. Так сделано quikluacsharp.ru/qlua-c-cpp-csharp/obmen-dannymi-mezhdu-dll-c-c-i-prilozheniem-c/
Это сделать легче всего и меньше будет проблем.
Да поможет мне dispatcher…
Может и не помочь. Тут куча ведь неизвестных. Квик написан на си++ и полностью нативное приложение. GUI вы собираетесь писать на c# и wpf да еще не в контексте основного потока. Lua Api приспособлен больше для нативных языков. Если вы не знакомы с Lua Api, разберитесь как с ним взаимодействовать на си++. А потом на си++ вызывайте классы из си# с вашими формами на wpf напрямую.
avatar
kirilles, там проблема в том, что для собственных индикаторов на Lua нельзя строить свечи… Хотя разработчики вроде обещали добавить такой функционал… У меня дельта строится в стокшарповских чартах…
kirilles, вот падла… надо было лучше просить…  

Читайте на SMART-LAB:
Фото
Финансовые результаты Аэрофлота по РСБУ за 6 месяцев 2026 года
Аэрофлот опубликовал финансовые результаты по РСБУ за 2 квартал и 6 месяцев 2026 года. ✈️ Выручка во 2 квартале увеличилась на 3,3% год к году и...
Фото
Эмитент допустил дефолт: что делать инвесторам в таком случае?
Дефолт по облигациям не всегда означает полную потерю вложений. Даже если эмитент перестал платить купоны или не погасил долг, инвестор...
Ключевые тезисы менеджмента Норникеля по итогам раскрытия финансовых результатов за 1П 2026 г.
Сегодня мы раскрыли финансовые результаты за 1П 2026 г. по МСФО. Все наши материалы доступны на сайте...
Фото
ГМК Норникель: Прибыль иксанула, а котировки упали - обзор отчета по МСФО за 1-е полугодие 2026
ГМК Норникель отчитался сегодня по МСФО за 1- е полугодие Чистая прибыль выросла в 2 раза по сравнению с прошлым годом...

теги блога Сергей Гаврилов

....все тэги



UPDONW
Новый дизайн