I've written an article on auto-magical language bindings, which you can find here: http://inspired-code.blogspot.com/p/automagical-language-bindings-using-c.html
The specifics of the article shows how to expose C functions to lua.
The summary is, all you need to do to expose a function is add it to the list of exposed functions wrapped with the macro AUTO_BIND_C_FUNTION_TO_LUA such as in the following code snippet:
// Some function prototypes to expose void someFunc(int arg1, int arg2, const char* arg3); void anotherFunc(const char* arg1, double arg2, int arg2); // ... etc ...
// Import table
static const struct luaL_Reg scriptCallableFunctions[] =
{
AUTO_BIND_C_FUNTION_TO_LUA(someFunc)
AUTO_BIND_C_FUNTION_TO_LUA(anotherFunc)
// ... etc ...
};
// Register all the functions we want wrapped
void registerLuaBindings(lua_State* L)
{
// Register all of our bindings
for (luaL_Reg r : scriptCallableFunctions) {
lua_pushcclosure(L, r.func, 0);
lua_setglobal(L, r.name);
}
}
That certainly simplifies the work of exposing a function to Lua. I believe the approach could be adapted relatively easily for possibly other languages, such as python also.
Hope you like it.
No comments:
Post a Comment