首页 > 编程语言 >Lua 如何在Lua中调用C/C++函数

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

时间:2024-03-14 11:33:47浏览次数:15  
标签:function 调用 函数 lua C++ Lua add

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

标签:function,调用,函数,lua,C++,Lua,add
From: https://blog.csdn.net/hellokandy/article/details/136687945

相关文章

  • Qt 如何搭建Lua的运行环境
    一、Lua简介Lua是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程(procedural)编程、面向对象编程、函数式编程以及数据描述。Lua是动态类型的,运行速度快,支持自动内存管理,因此被广泛用于配置、脚本编写等场景。二、Lua的优势Lua脚本可以很容易的被C/C++代......
  • 单据类型参数设置增加自定义参数并通过BOS标准函数调用
     1、BOS函数说明2、创建对应单据的【单据类型参数】,继承自【单据类型参数模版】。 3、在单据参数中绑定【单据类型参数对象】 4、参数设置设置对应参数 5、在BOS中调用标准函数进行使用。 ......
  • C++工程(五):CMake+NDK交叉编译
    写一个HelloWorld#include<iostream>intmain(intargc,charconst*argv[]){for(inti=0;i<5;++i)std::cout<<"HelloWorld"<<std::endl;return0;}build_for_android.sh脚本文件#/bin/bashexportANDROID......
  • 【操作系统】执行系统调用后发生了什么?
    执行系统调用后发生了什么?什么是系统调用?系统调用是受控的内核入口,借助于这一机制,进程可以请求内核以自己的名字去执行某些动作。以应用程序编程接口(API)的形式,内核提供了一系列服务供程序访问。包括创建进程、执行I/O,以及为进程间通信创建管道等。执行系统调用后发生的事件......
  • 【C++】继承
    目录一、继承的概念和定义1.1、继承的概念1.2、定义方式1.3、继承关系和访问限定符二、基类和派生类对象的赋值转换三、继承中的作用域四、派生类的默认成员函数问题:子类编译默认生成的构造函数会做什么?4.1、构造函数4.2、析构函数4.3、拷贝构造4.4、赋值运算符......
  • C++:[NWRRC2015] Concatenation(洛谷)P7050
    题目描述FamousprogrammerGennadylikestocreatenewwords.Onewaytodoitistoconcatenateexistingwords.Thatmeanswritingonewordafteranother.Forexample,ifhehaswords cat and dog,hewouldgetaword catdog,thatcouldmeansomething......
  • 详解c++多态中的析构与构造函数
    首先简单介绍一下多态。多态是面向对象编程中的概念,它允许我们使用基类类型的指针或引用来调用派生类对象的方法。C++中实现多态主要依靠虚函数和动态绑定。那怎么使用多态呢?基类指针或引用指向派生类对象。在我学习过程中,这些概念耳熟能详,但是为什么要有多态呢,先看下面这......
  • c++:类和对象中:拷贝构造和赋值运算符重载详解
    c++:类和对象构造函数和析构函数详解`文章目录c++:类和对象构造函数和析构函数详解前言一、拷贝构造怎么写拷贝构造1.拷贝构造也是构造函数的一种,构造函数没有值.所以拷贝构造也没有返回值**2.拷贝构造只有一个形参,正常这个形参是自定义类型对象的引用.3.如果我们......
  • L1-011 A-B(C和C++)
    题目:本题要求你计算A−B。不过麻烦的是,A和B都是字符串——即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式:输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行......
  • 【C++】【OpenCV-4.9.0】视频写入(VideoWriter,借助samples中的代码示例来进行学习)
    借助官方离线文档中的samples来理解VideoWriter文档位置:samples/cpp/tutorial_code/videoio/video-write/video-write.cpp注:需要提前下载openh264-1.8.0-win64.dll,然后放在Release文件夹下,否则无法正确对输出文件进行编码从而运行失败1#include<iostream>2#include......