首页 > 其他 > 详细

Lua调用C函数

时间:2014-11-29 20:11:49      阅读:232      评论:0      收藏:0      [点我收藏+]

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));
    }

}

 

Lua调用C函数

原文:http://www.cnblogs.com/blackwhite/p/4131648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!