У меня наконец-то возникла проблема, что я не могу найти решение здесь. Я использую Lua Wrapper Class, который находится здесь http://lua-users.org/wiki/CppConvenientLuaWrapperClass. Мы смогли выставить полный API плюс другие функции, такие как последовательная связь и дальше.Lua Wrapper Class - Предоставление статических методов C++ для Lua через DLL
Концепция этой Lua Wrapper заключается в том, что вы раскрываете каждый метод перед компиляцией, поэтому, когда вы запускаете свою программу, все методы будут добавлены в стек Lua и таким образом вы сможете их выполнить. Теперь идея состоит в том, чтобы создать вид Dll, чтобы завершить этот процесс разоблачения. Таким образом, вам не нужно будет выпускать версию со всеми открытыми методами, вместо этого вы загружаете их через несколько DLL-файлов.
Я попытался создать другую таблицу и зарегистрировать другие методы в этой таблице, но при этом предыдущие разоблаченные методы перестают работать.
Другой способ, о котором я могу думать, заключается в создании dll, но в C, который содержит все необходимые методы и загружает его непосредственно в Lua. Но я думаю, что было бы лучше.
Вы смогли сделать что-то подобное? Есть ли у меня неправильная концепция?
Благодаря
Humm ... Я действительно не хочу, чтобы изменить нашу обертку в это время. Думаю, мне удастся это сделать. Вместо добавления новой таблицы для функций плагина, я добавил новую подтаблицу, в которой будут указаны имена функций и cClosures для вызова из Lua. Таким образом, в конце концов, мы должны иметь:
application.functionName()
application.plugin.functionName()
Даже если она работает таким образом, что будет делать хорошо. Теперь интересно, как мы можем ссылаться на lua_settable при экспонировании функций, добавляемых в приложение [plugin] [pluginFunction] вместо приложения [pluginFunction] ?! Это как подвергаются нормальные функции:
//mState is a pointer to a Lua_State
lua_pushstring(mState, functionName);
//methodDesc is a pointer to an object that describes the function arguments/returns
lua_pushlightuserdata(mState, methodDesc);
//exposeMethodProxy is the method that is responsible for conneting lua c-calls to the c-functions
lua_pushcclosure(mState, exposedMethodProxy, 1);
//mMethodTableIndex is a member variable that contains the index of the table tha hold all exposed functions
lua_settable(mState, mMethodTableIndex);
Любые идеи о том, как я мог бы достичь добавления cclosures не к основной таблице (в mMethodTableIndex), как mainTable [FunctionName], но в maintable [плагин] [functionNane] .?
wxLua делает то же самое - вы можете взглянуть на их код, чтобы посмотреть, как они это сделали. – finnw
Humm спасибо, я посмотрю – MRodrigues