|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|
vs c++ & lua23.01.2012, 20:06. Показов 4698. Ответов 17
Метки нет (Все метки)
Здравствуйте, занимаюсь разработкой 3д игры, пишу движок и прочее, когда то модил сталкера, в плане скриптинга, уж очень нравилось и в программирование пришел именно через это, а теперь вот свое делаю, вроде все идет так как хочу, но есть НО, у себя в игре хочу использовать луа, причем так чтобы можно было экспортировать классы и функции из с++ в луа. Для этого как бэ есть готовые решения luabindы всякие и прочее, но использовать нормально луабинд у меня не получилось, уже матов не хватает, экспортировать классы отказывается, выдает ошибки с проблемами со стеком и адресами, исключениями, в общем муть всякая. Между делом искал что пишут про эти биндинги(luabind, tolua, tolua++, rlua и прочее), примерно 50/50 - те кто использует их и им нравятся, и тех кто использует самопальные, и им не нравятся эти луабинды и прочее. И пришла мысль, а что если самому попробовать сделать нечто вроде самопального биндинга? Возможно ли сделать самому качественный экспорт с++ классов, пространств имен и прочего в луа? Прошу опытных в этом деле высказаться по данной проблеме. Заранее спасибо!
0
|
|
| 23.01.2012, 20:06 | |
|
Ответы с готовыми решениями:
17
Lua & bash Lua наследование, lua ооп query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так? |
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|
| 01.02.2012, 11:03 [ТС] | |
|
Оказывается можно, и не так уж и сложно.
0
|
|
|
|
|
| 01.02.2012, 19:05 | |
|
Это не ответ на поставленный вопрос, поскольку ты, судя по всему, с Lua работать умеешь. Но на всякий случай: https://www.cyberforum.ru/cpp-... 68085.html
Если в данной теме будут получены конкретные ответы на конкретные вопросы, но надо будет подумать о том, чтобы эти две темы объединить
0
|
|
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|
| 01.02.2012, 19:09 [ТС] | |
|
Evg, если надо, думаю что смогу выложить эту систему биндинга сюда, только немного подшаманить ее нужно.
0
|
|
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|
| 01.02.2012, 19:17 [ТС] | |
|
Evg, ну как бэ ... я скок читал про луа в интернете везде употребляется это слово, я не мог понять что это такое еще когда занимался моддингом сталкера, потом посмотрел в гугл переводчике перевод - "связка", ну вот потом то и понял что биндинг с++ и луа это связка работы с++ и луа ... как-то так.
0
|
|
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|
| 01.02.2012, 19:24 [ТС] | |
|
К примеру помнишь я спрашивал как вызвать луа функцию, а ты написал пример как и + экспорт функции из с++ в луа? Ну дык все правильно было, но ведь это гемор передлывать все функции под луа, или вызов функции к примеру можно вообще одной строчкой сделать, регистрацию классов, функций,пространств имен, переменных можно делать гораздо проще с системой биндинга (я не говорю что моей ибо я ее делаю затачивая под свои нужды), как то так.
0
|
|
|
|
|||||||||||
| 01.02.2012, 19:47 | |||||||||||
|
В своей программе я сделал классы-обёртки. По возможности старался делать универсально, но у каждого разные понятия о том, как наиболее удобно работать с этим делом (в каком виде его реализовывать). В аттаче файлы, которые целиком выдраны из моей проги (а потому просто так они не скомпилятся, т.к. нужна реализация ASSERT)
Вся работа идёт в виде двух классов TLuaCaller и TLuaCallee. На тот случай, если не знаком с программерской терминологией, то "caller" - это тот, кто вызывает (функцию), а "callee" - это тот, кого вызывают Пример использования. Не готовый пример 1 в 1 для запуска, а чисто для того, чтобы общий принцип показать. Ты вроде бы как в курсе проблемы, по идее тебе понятно будет. Вызов функции Lua из кода на Си++
0
|
|||||||||||
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|||||||||||
| 01.02.2012, 19:57 [ТС] | |||||||||||
|
Evg, ну да, тебе так удобно, а мне вот удобно чтоб я эту функцию не переделывал, и одной строкой ее зарегистрировал и одной строкой вызвал функцию из луа и получил результат, у каждого разные вкусы, вот мой вариант, он очень громоздкий ибо показываю чтоб понять суть:
0
|
|||||||||||
|
|
|||
| 01.02.2012, 20:21 | |||
|
При такой реализации через шаблон невозможно сделать чёткий run-time контроль за передаваемыми типами. Другими словами, стоит выбор между тем, чтобы сэкономить 2-3-4 строки на вызове функций и тем, чтобы сделать систему с надёжным контролем. Мой программерский опыт уже давно показал, что выражение "краткость - сестра таланта" в случае программирования почти никогда себя не оправдывает и ни капельки не раздумывая отказался от реализации через шаблоны В моей реализации для повторения шаблонного варианта (т.е. сокращения кода) я бы в TLuaCaller добавил методы типа DoCalIntIntString (вызвать функцию с результатом Int и аргументами Int, String). Потому как в "обычном" случая среди множества всех прототипов навряд ли наберётся хотя бы два десятка разных, а потому допиливание напильником будет не более 20 лишних методов. Правда для TLuaCalee я пока не вижу подобных решений. Добавлено через 1 минуту Кстати, в твоём варианте только способ вызова функций Си++ из Lua. Для полноты картины показал бы и вызов функций Lua из Си++ (он поинтереснее будет )
0
|
|||
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|||||||||||
| 01.02.2012, 20:29 [ТС] | |||||||||||
|
Evg, как бэ вот, тож громоздкий, еще не оптимизировал но думаю суть ясна будет:
"Эта функция" - любая функция, кроме нестатической функции-члена класса. Добавлено через 1 минуту С предыдущим кодом можно экспортировать как возвращающие функции так и void, указав в аргументах шаблона nil
0
|
|||||||||||
|
|
||
| 01.02.2012, 20:36 | ||
|
1. Шо такое ToLua? 2. Внутри твоего шаблонного класса обрабатывать ошибки неправильно. Ошибку нужно отдавать наверх, и там её обрабатывать. Т.е. внизу делают, наверху думают Ну а в качестве рабочей версии оба твоих шаблона вполне приемлимы
0
|
||
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|||
| 01.02.2012, 20:41 [ТС] | |||
![]() ToLua - эту идейку я позаимствовал с одного сайта, помещает значение на вершину стека
0
|
|||
|
|
|||
| 01.02.2012, 21:21 | |||
|
Ну или чтобы стало ясно, более ощутимый пример. Когда ты открываешь файл, то в случае отсутствия файла тебе системные функции каким-то образом возвращают информацию о том, что файл отсутствует. А ты (как программист, а не как пользователь), уже сам решаешь, что делать в этом случае. Согласись, было бы совсем дебильно, если бы функция open или fopen в случае отсутствия файла печатала на экран текст ошибки и завершала работу программы. Внизу только делают и возвращают результат наверх. А наверху думают, что с этим результатом делать. Это справедливо не только в luabind'ах, но и при реализации любого интерфейса, претендующего на универсальность хотябы в минимальной степени В твоём случае очевидным и общепринятым (но на мой взгляд идиотским) решением было бы сделать throw и пусть наверху это дело ловят.
0
|
|||
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
||||||
| 01.02.2012, 21:30 [ТС] | ||||||
|
Evg, нет, несколько перегруженных функций типа так:
На счет ошибки ... я подумаю, хотя скриптов которые будут вызываться из движка не так и много будет ... буду думать. Добавлено через 1 минуту На счет универсальности ... затачиваю под себя ... а в плане программирования я очень придирчив ... поэтому стараюсь.
0
|
||||||
|
|
|||
| 01.02.2012, 21:40 | |||
|
0
|
|||
|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|
| 01.02.2012, 21:42 [ТС] | |
|
Evg, учту замечание.
0
|
|
| 01.02.2012, 21:42 | |
|
Помогаю со студенческими работами здесь
18
error '80020009' Îøèáêà. /lalala/profile.asp, line 28 Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2 немогу найти драйвера на PCI\VEN_1039&DEV_7012&SUBSYS_810D1043&REV_A0\3&61AAA01&0&17 Мультимедиа контролер PCI\VEN_14F1&DEV_8800&SUBSYS_EA3D14F1&REV_05\4&25700A26&0&3020 Нужен драйвера, код PCI\VEN_1039&DEV_7012&SUBSYS_0C98105B&REV_A0\3&B1BFB68&0&17 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|