Lua作为嵌入式语言,主要的优点就是和C语言的相互调用,通过lua调用c函数是非常有用的,通过将c动态库引入,从而能调用c的函数,大大丰富了Lua的开发能力。
Lua调用C函数的方式:
1.Lua能调用C函数,不是说Lua能调用所有的C函数,就像C调用Lua一样,需要遵守一定的协议,Lua只能调用已经注册的C函数,并且也是通过虚拟栈实现的。
2.注册的C函数需要满足的形式:
typedef int (*lua_CFunction) (lua_State *L);
例:
double max(double a, double b){
return a>b ? a:b;
}
static int l_max (lua_State *L) {
double num1 = lua_tonumber(L, 1);
double num2 = lua_tonumber(L, 2);
lua_pushnumber(l, max(num1, num2));
return 1;
}
3.注册成C函数
lua_pushcfunction(L, l_max); lua_setglobal(L, "mymax");
4.Lua中调用(test.lua)
d = mymax(340,37); io.write(d)
完整的C函数
#include"lua.h" #include"lualib.h" #include"lauxlib.h" double max(double a, double b){ return a>b ? a:b; } static int l_max (lua_State *L) { float num1 = lua_tonumber(L, 1); float num2 = lua_tonumber(L, 2); lua_pushnumber(L, max(num1, num2)); return 1; } int main() { lua_State *L = luaL_newstate(); luaL_openlibs(L); lua_pushcfunction(L, l_max); lua_setglobal(L, "mymax"); if (luaL_loadfile(L, "test.lua") || lua_pcall(L, 0, 0, 0)) { printf("%s", lua_tostring(L, -1)); } }
原文:http://www.cnblogs.com/blackwhite/p/4131648.html