c和lua进行的一些基础交互和处理,这里留用lua5.1
来源:互联网 发布:linux命令存储 编辑:程序博客网 时间:2024/06/03 13:26
#include <iostream>extern "C" {#include "lua.h"#include "lualib.h"#include "lauxlib.h"}static int my_add(lua_State *L){ int a = luaL_checknumber(L, 1); int b = luaL_checknumber(L, 2); lua_pushnumber(L, a + b); return 1;}static const struct luaL_Reg mylib[] = { {"madd", my_add }, {NULL, NULL}};int main(int argc, char** argv) { lua_State *L = luaL_newstate(); luaL_openlibs(L); //============================================= //c和lua交互部分 lua_pushcfunction(L, my_add); lua_setglobal(L, "madd"); // lua中调用时 print(madd(10,20)) luaL_register(L, "mylib", mylib); // lua中调用时 local lib require "mylib" print(lib.madd(10,20)) //============================================ //lua调用c函数 // 参考上面 //============================================ //c调用lua函数 lua_getglobal(L, "math"); //lua_pushstring(L, "min"); lua_getfield(L, -1, "pow"); if (lua_isfunction(L, -1)) { lua_pushinteger(L, 3); lua_pushinteger(L, 2); lua_call(L, 2, 1); printf("result:%d\n", lua_tointeger(L, -1)); lua_pop(L, 1); } //============================================ //c中操作lua的表, 索引和kv操作 lua_newtable(L); lua_pushstring(L, "key"); lua_pushstring(L, "mm"); //由于上面两次压栈,现在table元素排在栈顶往下数第三的位置 lua_settable(L, -3); //lua_settable会自己弹出上面压入的key和value for (int i = 1; i < 10; i++) { lua_pushinteger(L, i); //lua_pushstring(L, "gogoxxxx" + i); lua_pushfstring(L, "gogoxxxx%d", i); lua_settable(L, -3); } lua_setglobal(L, "mk"); //lua_settable会自己弹出上面压入的key和value //============================================ //c中遍历lua的表 lua_getglobal(L, "mk"); size_t n = lua_objlen(L, -1); for (int i = 1; i <= n; ++i) { lua_pushinteger(L, i); lua_gettable(L, -2); printf("mk[%d] = %s\n", i, lua_tostring(L, -1)); lua_pop(L, 1); } printf("========================================\n"); int nIndex = lua_gettop(L); // 取 table 索引值 lua_pushnil(L); // nil 入栈作为初始 key while (0 != lua_next(L, nIndex)) { printf("mk[N] = %s\n", lua_tostring(L, -1)); lua_pop(L, 1); // 弹出 value,让 key 留在栈顶 } // 现在栈顶是 table lua_pushstring(L, "=====>"); lua_setglobal(L, "kkm"); luaL_dofile(L, "test.lua"); lua_close(L); system("pause"); return 0;}
lua脚本部分
local lib = require "mylib"print("gogo");print(mk.key);print(mk[1]);print(kkm);print(madd(100, 20))print(lib.madd(120, 20))
阅读全文
0 0
- c和lua进行的一些基础交互和处理,这里留用lua5.1
- Lua5.1编程四:Lua与C交互基础
- Lua5.1编程4:Lua与C交互基础
- Lua5.1编程四:Lua与C交互基础
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- lua和c的交互
- C和lua交互
- lua和C交互
- C/C++和Lua的交互
- 计算鸡和兔子的数量
- Wannafly挑战赛3-C-位数差(二分)
- Xmanager5用Xstart连接CentOS7
- HDU-2025(查找最大元素)
- hibernate
- c和lua进行的一些基础交互和处理,这里留用lua5.1
- jQuery的几大难点
- java 对图片的矩阵运算示例
- MVC5中根据word模板填充数据生成word
- 全部用jquery写的无缝左右滑动轮播图
- 多线程的应用
- 火车购票系统
- 创建字体信息设置界面
- setTimeout()和setInterval()