|
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
|
|
vs c++ & lua23.01.2012, 20:06. Показов 4639. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|