Lua 如何在Lua中调用C/C++函数

Lua调用C函数有两种方式

  1. 程序主体在C中运行,C函数注册到Lua中。C调用Lua,Lua调用C注册的函数,C或者Lua得到函数的执行结果。
  2. 程序主体在Lua中运行,C函数作为库函数供Lua使用。

C++的代码如下

如何在Lua脚本中调用这个C语言函数(add_function)?

#include <QCoreApplication>
#include <stdio.h>
extern "C"{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}

/* C语言函数 */
int add_function(lua_State* L)
{
    /* 从Lua栈中获取参数 */
    double x = luaL_checknumber(L, 1);
    double y = luaL_checknumber(L, 2);

    /* 执行函数操作 */
    double z = x + y;

    /* 将结果压入Lua栈中 */
    lua_pushnumber(L, z);

    /* 返回结果数量 */
    return 1;
}

lua_State *L;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    printf("started\r\n");

    L =  luaL_newstate();//新建lua解释器
    luaL_openlibs(L);//载入lua基础库

#if 1
    /* 将add_function函数绑定到Lua中的call_add_function函数,这样就可以在Lua脚本中调用这个C语言函数了 */
    lua_register(L, "call_add_function", add_function);

    /* 加载Lua脚本文件 */
    luaL_dofile(L, "./test.lua");

    //执行lua中的callcfun函数
    lua_getglobal(L, "callcfun");
    lua_call(L, 0, 0);
#endif

    /*cleanup Lua*/
    lua_close(L);

    system("pause");
    return a.exec();
}

lua调用C++函数

新建 text.lua,代码如下:

-- Lua脚本(在Lua脚本中,可以使用以下代码来调用C语言函数)
function callcfun()
    local z = call_add_function(1.5, 2.3)
    print(z)  -- 输出3.8
end