Получить состояние Lua изнутри Lua, чтобы оно могло быть передано обратно в C - PullRequest
0 голосов
/ 07 сентября 2010

Я могу загрузить DLL, созданную из источника C из Lua.Поэтому я хочу передать текущее состояние Lua ОТ Lua в загруженную DLL.

В основном я использую игровой движок, который использует Lua.Редактор сцены указанного игрового движка создает состояние Lua и вызывает сценарии Lua, и я точно знаю, что он использует состояние 1 lua для всех вызываемых им сценариев.Итак, я думаю, что это состояние известно из самих этих сценариев lua.Из этих сценариев Lua я хочу загрузить свою собственную DLL и передать в это состояние этой DLL, чтобы мой код на C ++ мог использовать это состояние lua для вызова функций lua из тех же сценариев lua и быть в том же состоянии.Имеет ли это смысл?

Ответы [ 2 ]

4 голосов
/ 07 сентября 2010

Я упускаю что-то очевидное, я думаю (что меня не удивит - я далеко не эксперт по Lua).

Но если вы позвоните package.loadlib ,дескриптор функции, который вы получите обратно, будет вызываться с состоянием самой Lua, не так ли?См прототип CFunction

3 голосов
/ 07 сентября 2010

Напишите вашу DLL как обычный модуль Lua, реализованный на C. PiL имеет описание , но он добавляет к именованию одну экспортируемую функцию после имени DLL, чтобы обычная функция require могла загрузитьЭто.Чтобы загрузить библиотеку require "mylib", вы создаете mylib.dll с экспортированной функцией luaopen_mylib(), которая создает таблицу, содержащую все методы, которые вы хотите использовать, и возвращает ее.Эта функция, как и все другие методы, которые она создает, передается текущее состояние Lua при каждом вызове.

Если ваш движок не разрешает require в сценариях, то вряд ли он будет иметьразрешено package.loadlib либо, и вы, вероятно, вообще не сможете загрузить свою DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...