Calling Lua function from c++ is very simple. Value passing between c++ and Lua goes through stack, Lua C API provides a convenience ways for you to call Lua function from C. To call Lua function, you need to specify:
1. Function Name.
2. Parameters of function call.
3. Return values expected ( Lua function support multiple results reture)
Let say my lua function name call f in last.lua, takes 2 parameters.
-- last.lua
function f (x, y)
return (x^2 * math.sin(y))/(1 - x)
end
I perform function call from c++ like this:
11 | lua_State *L = lua_open(); |
13 | if (luaL_loadfile(L, "last.lua" ) || lua_pcall(L, 0, 0, 0)) { |
14 | printf ( "error: %s" , lua_tostring(L, -1)); |
18 | lua_getglobal(L, "f" ); |
19 | if (!lua_isfunction(L,-1)) |
24 | lua_pushnumber(L, 21); |
25 | lua_pushnumber(L, 31); |
28 | if (lua_pcall(L, 2, 1, 0) != 0) { |
29 | printf ( "error running function `f': %s/n" ,lua_tostring(L, -1)); |
34 | if (!lua_isnumber(L, -1)) { |
35 | printf ( "function `f' must return a number/n" ); |
38 | z = lua_tonumber(L, -1); |
39 | printf ( "Result: %f/n" ,z); |
Compile it with g++ like this:
g++ -o last{,.cc} -llua -ldl
The results:
Result: -12.158958
Brief explanation of the C++ codes above:
First, I trigger lua_getglobal to get the function name, then I push 2 parameters to stack. I make lua_pcall by telling Lua I have 2 params and expect 1 value return. Upon success, I retrieve the return value from the top of the stack.
No comments:
Post a Comment