Тема: Своя DLL для Lua: как реализовать работу my = require('mylib')
Во всех нормальных DLL библиотеках для Lua доступен такой синтаксис подключения / использования:
my = require('mylib')
my.метод_из_dll()
Т.е. не зависимо от того, в какое пространство имён добавляется сама библиотека в рамках своего кода (во втором параметре при вызове luaL_register), к методам библиотеки можно получить доступ через присвоение своей переменной при результата вызова require(), в приведённом тут примере - через my.
Но я не понимаю как это сделано! Ни в одной сделанной мной библиотеке этого не происходит.
Изучение других библиотек понимания тоже не добавляет.
Кто знает - приведите пример, пожалуйста, как должно выглядеть наполнение функции luaopen_XXX(), чтобы указанный синтаксис в Lua срабатывал?
Я пишу просто:
static struct luaL_reg lib_functions[] = {
{"SetVar", lua_SetVar},
{"GetVar", lua_GetVar},
{"SetVarList", lua_SetVarList},
{"GetVarList", lua_GetVarList},
{"UseNameSpace", lua_UseNameSpace},
{"GetCurrentNameSpace", lua_GetCurrentNameSpace},
{nullptr, nullptr}
};
LUAW32_API int luaopen_StaticVar(lua_State *L)
{
luaL_register(L, "stv", lib_functions);
return 0;
}
Но тогда только так:
my = require('StaticVar')
stv.метод_из_dll() -- < -- так работает, явно указано имя из вызова luaL_register
my.метод_из_dll() -- < -- так НЕ работает, "нет метода"
Что еще надо добавить в luaopen_StaticVar(), чтобы через my тоже заработало?