在C文件中,可以通过调用lua_register函数注册新的可以在lua脚本中使用的函数。
调用lua_register后,第二个参数lua_func_from_c可以在随后调用的lua脚本中作为一个lua函数使用。
执行结果:
具体例子(test_lua.c)如下所示:
- #include <lua.h>
- #include <lauxlib.h>
- #include <stdlib.h> /* For function exit() */
- #include <stdio.h> /* For input/output */
- void bail(lua_State *L, char *msg){
- fprintf(stderr, "\nFATAL ERROR:\n %s: %s\n\n",
- msg, lua_tostring(L, -1));
- exit(1);
- }
- int lua_func_from_c_func(lua_State *L)
- {
- printf("This is C\n");
- return 0;
- }
- int main(int argc, const char *argv[])
- {
- if(argc != 2)
- {
- return 1;
- }
- lua_State *L = luaL_newstate(); /* Create new lua state variable */
- /* Load Lua libraries, otherwise, the lua function in *.lua will be nil */
- luaL_openlibs(L);
-
- /* register new lua function in C */
- lua_register(L, "lua_func_from_c", lua_func_from_c_func);
- if( luaL_loadfile(L,argv[1]) ) /* Only load the lua script file */
- bail(L, "luaL_loadfile() failed");
- if( lua_pcall(L,0,0,0) ) /* Run the loaded lua file */
- bail(L, "lua_pcall() failed");
- lua_close(L); /* Close the lua state variable */
- return 0;
- }
具体脚本如下所示:
- print("Hello world")
- lua_func_from_c()
$ ./a.out my.lua
Hello world
This is C