Lua学习随笔 之 Lua下载 - 安装 - 编译 - C/C++相互调用

来源:互联网 发布:nginx ip跳转域名 编辑:程序博客网 时间:2024/06/06 02:37

下载:

编程环境:VS2013 - Win32控制台空项目    访问密码 4319

Lua版本:lua-5.3.3    访问密码 849b


编译:

下载好lua库以后,将其解压加载至工程,编译前,将库文件中 lua.c & luac.c 里的主函数(main)注释掉,或删除该文件,就可以正常编译了。


调用:

主函数文件 - code.c 

#include "lua.h"  #include "lualib.h"  #include "lauxlib.h"  #include "luaconf.h"  #include <stdio.h> lua_State* L;int add(lua_State* L){lua_Integer x = luaL_checkinteger(L, 1);lua_Integer y = luaL_checkinteger(L, 2);printf("from C result:%d\n", x + y);return 1;} LUA_NUMBER lua_add(void){/* 获取L中的 lua_add函数 即 加载脚本中的 lua_add函数 */lua_getglobal(L, "lua_add");/* 压栈 即传参*/lua_pushnumber(L, 2);/* 压栈 即传参*/lua_pushnumber(L, 2);/* 调用当前加载函数,传入2个参数,期望获取1个返回值*/lua_call(L, 2, 1);/* 获取返回值 */LUA_NUMBER sum = lua_tonumber(L, -1);/* 弹栈 */lua_pop(L, 1);return sum;}int main(int argc, char *argv[]) {LUA_NUMBER sum;// lua脚本地址char path[256] = "F:/VSPro/love/Debug/727057301.lua";/* 分配空间 */L = luaL_newstate();  /* 加载库 */luaL_openlibs(L);/* 加载函数地址到 L 中 */lua_pushcfunction(L, add);/* 为函数地址设置调用名称 */lua_setglobal(L, "ADD");/* 加载lua脚本 */if (luaL_dofile(L, path)){printf("error\n");getchar();return 1;}#if 1sum = lua_add();printf("%lf", sum);#elselua_pcall(L, 0, 0, 0);lua_getglobal(L, "lua_add"); lua_pcall(L, 0, 0, 0);#endiflua_close(L);getchar();return 0;}


lua文件 - 727057301.lua


-- add two numbers function lua_add ( x, y )  print("from lua lua_add")-- print(x)-- print(y) ADD(2,3) return x + y end 



附工程源码以供大家调试学习

lua调用应用   访问密码 19e0





2 0