
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Call a Lua Function from C
Calling a Lua function from C is something that requires a series of steps and a mastery in the Lua library functions. Lua provides several library functions that we can use whenever we want to call Lua functions from C or the opposite.
Some of the most commonly used Lua library functions for calling a Lua function from C are −
- luaL_dofile(L, "myFile.lua");
- lua_getglobal(L, "add");
- lua_pushnumber(L, a);
and much more.
We will make use of these functions when we will call a Lua function from C.
The first step is to shut down the Lua interpreter and for that we need to write a code in C.
Example
Consider the example shown below −
extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } int main(int argc, char *argv[]) { lua_State* L; L = luaL_newstate(); luaL_openlibs(L); lua_close(L); printf( "Press enter to exit..." ); getchar(); return 0; }
Now, we just need to call the luaL_dofile(L, "myFile.lua"); function for the file in which we will write some Lua code that will get invoked from the C code.
Consider the code shown below as written inside the myFile.lua −
add = function(a,b) return a + b end
Now the C file which will call the above Lua function will look something like this −
int luaAdd(lua_State* L, int a, int b) { // Push the add function on the top of the lua stack lua_getglobal(L, "add"); // Push the first argument on the top of the lua stack lua_pushnumber(L, a); // Push the second argument on the top of the lua stack lua_pushnumber(L, b); // Call the function with 2 arguments, returning 1 result lua_call(L, 2, 1); // Get the result int sum = (int)lua_tointeger(L, -1); lua_pop(L, 1); return sum; }
And when we call this luaAdd() function in C, the output will be:(for a = 2,b = 3)
5