美文网首页
Lua与C数据交互二: C 调用Lua函数

Lua与C数据交互二: C 调用Lua函数

作者: feiperr | 来源:发表于2020-02-12 22:50 被阅读0次

Script.lua内容为

function sub(x, y) 
     return x -y
end

调用方式为:


#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

#define LUA_TOP_TYPE(L) {int t = lua_type(L, -1); printf("%s\n", lua_typename(L, t));}

int main()
{
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dofile(L, "script.lua");

    // Call Script function
    lua_getglobal(L, "sub"); //将script.lua 的sub函数压入栈顶
    LUA_TOP_TYPE(L); // 打印function
    lua_pushnumber(L, 1);
    lua_pushnumber(L, 2);
    lua_pcall(L, 2, 1, 0);
       //函数调用,参数2代表函数有2个参数,1代表一个返回值,0代表回调函数为空,
      //调用成功该函数会弹出参数以及函数,然后把返回值压入栈。
       //我们的例子中,程序执行完lua_pcall栈上只有返回值。


    // tonumber 不会弹栈
    int ret = lua_tonumber(L, -1);
    lua_pop(L, 1);

    lua_close(L);
    
    return 1;

//运行结果: 打印-1
}

C调用lua函数,注意栈上的number与参数的对应顺序。x对应1,y对应2。这跟参数压栈保持一致。

相关文章

  • lua和c的初始

    lua和c的交互包括:c访问lua的变量、c访问lua的table、c调用lua的方法、lua调用c的函数 参考链...

  • 2019-01-14

    Lua与C交互学习笔记 Lua与C交互是通过虚拟栈实现的 在C中调用Lua 方法一 栈中的情况如下表所示 方法二 ...

  • Lua与C数据交互二: C 调用Lua函数

    Script.lua内容为 调用方式为: C调用lua函数,注意栈上的number与参数的对应顺序。x对应1,y对...

  • Lua与C数据交互一

    C与Lua的数据交互,是通过虚拟栈来完成数据交互的,在C与Lua之间的交互,实际上是C与虚拟栈之间的交互以及Lua...

  • 对Lua ,C,C#互相调用的理解

    几种情况讨论 C调用Lua C调用C# C#调用C C#调用Lua Lua调用C Lua调用C# Lua调用C 本...

  • Lua与C++如何相互交互?

    Lua与C++如何相互交互 通过lua虚拟栈隔离Lua和C/C++类型和彼此内存的差异来实现数据及函数互相调拥。1...

  • C#与Lua交互过程和原理

    C#与Lua交互过程: C# Call Lua :由C#文件先调用Lua解析器底层dll库(由C语言编写),再由d...

  • C Lua API-栈

    简介 C API 是一组能使用C代码与Lua交互的函数。其中包括读写Lua全局变量、调Lua函数、运行一段Lua代...

  • Lua与C交互-访问Lua变量(原创)

    1、交互原理 一个Lua程序与C的交互都是通过Lua虚拟机中的一个堆栈进行的,通过调用Lua C API可以让C中...

  • Lua与C数据交互三: lua调用C函数

    在本节中,将会展示Lua如何调用c函数sub,直接看源代码 注意c函数以及调用此行的代码,这几行代码解析如下: 然...

网友评论

      本文标题:Lua与C数据交互二: C 调用Lua函数

      本文链接:https://www.haomeiwen.com/subject/fpehfhtx.html