lua与C++相互调用
发布时间:2020-12-14 22:14:05 所属栏目:大数据 来源:网络整理
导读:? ? 先从官网下载lua的源码,我下载的是这个,http://www.lua.org/ftp/lua-5.2.2.tar.gz。 在VS中创建新的项目,将下载的源码加入,并编译成lib,如下图 新建一个工程,将编译出来的lua.lib包含进来,就可以开始用了 1、C++ 调用 Lua 编写代码如下: #includ
? ? 先从官网下载lua的源码,我下载的是这个,http://www.lua.org/ftp/lua-5.2.2.tar.gz。 在VS中创建新的项目,将下载的源码加入,并编译成lib,如下图 新建一个工程,将编译出来的lua.lib包含进来,就可以开始用了 1、C++ 调用 Lua 编写代码如下: #include <iostream> using namespace std; #pragma comment(lib,"lua.lib") extern "C" { #include "../lua/lua/lua.h" #include "../lua/lua/lualib.h" #include "../lua/lua/lauxlib.h" } void main() { lua_State* L = luaL_newstate(); // 请求一个lua虚拟机 if (!L) { cerr << "new state" << endl; return ; } int nRet = luaL_loadfile(L,"luatest.lua"); // 加载测试文件 if (nRet != 0) { cerr << "load file luatest.lua" << endl; return ; } lua_pcall(L,LUA_MULTRET,0); // 初始化函数调用 // 开始调用lua函数 lua_getglobal(L,"luafun"); // 在全局表中查找luafun函数 lua_pushinteger(L,5); // 传一个参数5 nRet = lua_pcall(L,1,0); // 告诉lua我要传一个参数给他(第一个1),他要回一个结果给我(第二个1) if (nRet != 0) { cerr << "call luafun fail" << endl; return ; } int nValue = lua_tointeger(L,-1); // 获取返回参数 cout << nValue << endl; }在luatest.lua中,我们的代码是这样的 function luafun(n) return n * n end 这个程序最终会输出25 2、Lua调用C++ #include <iostream> using namespace std; #pragma comment(lib,"lua.lib") extern "C" { #include "../lua/lua/lua.h" #include "../lua/lua/lualib.h" #include "../lua/lua/lauxlib.h" } int CppFun(lua_State* L) { const char* pstr = lua_tostring(L,1); // 获取传进来的参数 cout << pstr << endl; return 0; } void main() { lua_State* L = luaL_newstate(); // 请求一个lua虚拟机 if (!L) { cerr << "new state" << endl; return ; } int nRet = luaL_loadfile(L,0); // 初始化函数调用 lua_register(L,"cppFun",&CppFun); // 注册一个lua可以调用的C++函数 // 开始调用lua函数 lua_getglobal(L,"luafun"); // 在全局表中查找luafun函数 lua_pcall(L,0); }在lua中我们的代码是这样的 function luafun() cppFun("lua call cpp") // 调用注册过的C++函数 end这个程序最后会输出lua call cpp 好了,写完了,有疑问的童鞋留言哈 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |