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

相关推荐

  1. Lua 如何Lua调用C/C++函数

    2024-03-14 04:08:03       22 阅读
  2. 39、Lua 调用C函数(lua-5.2.3)

    2024-03-14 04:08:03       13 阅读
  3. lua的类型,lua_State,函数调用

    2024-03-14 04:08:03       15 阅读
  4. Lua调用函数的方式汇总

    2024-03-14 04:08:03       16 阅读
  5. Lua 如何实现高效的内存管理?

    2024-03-14 04:08:03       10 阅读
  6. lua的pcall和xpcall和直接调用一个函数的区别

    2024-03-14 04:08:03       12 阅读
  7. Lua调用c++函数的两种办法

    2024-03-14 04:08:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 04:08:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 04:08:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 04:08:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 04:08:03       20 阅读

热门阅读

  1. Unity3D 动态生成场景管理节点详解

    2024-03-14 04:08:03       21 阅读
  2. Hive函数 EXPLODE 和 POSEXPLODE 使用示例

    2024-03-14 04:08:03       23 阅读
  3. 记录一次大厂面试题

    2024-03-14 04:08:03       22 阅读
  4. 嵌入式学习日记 27

    2024-03-14 04:08:03       20 阅读
  5. C后端开发,记录一个关于条件变量的死锁bug

    2024-03-14 04:08:03       20 阅读
  6. 动态导入图片

    2024-03-14 04:08:03       20 阅读
  7. 大模型prompt-文章生成

    2024-03-14 04:08:03       23 阅读
  8. LeetCode[题解] 2864. 最大二进制奇数

    2024-03-14 04:08:03       21 阅读
  9. 蓝桥杯:货物摆放

    2024-03-14 04:08:03       18 阅读
  10. 蓝桥杯冲刺_二分(正在补题)

    2024-03-14 04:08:03       20 阅读