设为首页 加入收藏

TOP

通过Demo程序加深Lua和C的交互
2018-01-22 17:24:43 】 浏览:177
Tags:通过 Demo 程序 加深 Lua 交互

这篇文章主要通过Demo程序加深Lua和C的交互. 涉及到交互,分为:

Lua中如何调用C函数 C中如何调用Lua函数

这里先描述C中如何调用Lua函数, 想象一下, C到底怎么和Lua进行通信,如何告诉它我调用的是xxx参数?

Lua采取的是利用栈进行交互 Lua提供了C API对栈进行操作, 利用各种Lua_pushXXX将不同的值压入栈中,然后调用Lua脚本时自然会退栈取出参数运行 Lua栈状态需要自己进行维护,若发生多线程同时对Lua栈操作,没有加锁保护的话会导致栈状态混乱

hello.lua

str = "hello world"
-- 定义一个tab
tb = {name = "hello",id = 20180119}   

注意: Lua使用--表示为注释

main.c

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        int main(void) { char *str; lua_State *L; int li; L = luaL_newstate(); /* 创建Lua
       虚拟机*/ luaL_openlibs(L); /* 加载Lua基本库 */ luaL_loadfile(L, "hello.lua"); /* 加载Lua文件,但是不运行 */ lua_pcall(L, 0, 0, 0); /* 运行Lua文件,参数个数, */ //luaL_dofile(L,"hello.lua"); li = lua_gettop(L); /* 返回栈顶索引(即栈长度)*/ lua_getglobal(L,"str"); /* 获取str的值,压入栈中 */ str=lua_tostring(L,1); /* 出栈,将给定索引处的Lua值转换为C字符串 */ printf("str = %s\n",str); }
      
     
    
   
  

lua_getglobal(L,”str”)

执行两步操作 首先将str放入栈中 然后由Lua去全局表中匹配str的值,并将str的值返回栈顶

luaL_dofile(L,”helloscript.lua”);

它是这样子定义的:

#define luaL_dofile(L,fn) (LuaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0)) 相当于luaL_loadfile + lua_pcall,不仅加载而且运行 <

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言中的头文件介绍 下一篇编程团体赛(C语言实现)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目