Lua C++交互 应用实例步骤(UserData使用)

一.配置Lua C++交互环境     1.下载Lua 包环境

  地址: https://www.lua.org/download.html ,我们这里用的是5.4.2版本。

  2.新建C++ 控制台应用程序   3.导入Lua 源码

  1)导入Lua 源码到同级目录(这样做为了Main函数所在类添加Lua 的C 类的时候直接可以include,不需要考虑目录层级问题)

  

Lua C++交互 应用实例步骤(UserData使用)

 

   打开的目录里,将5.4.2 的lua包里的 src目录里的文件全部拷到此目录

  2)添加Lua 源码

  

Lua C++交互 应用实例步骤(UserData使用)

 

   选中刚刚导入的Lua文件

  3)编译

  这时,点击目录生成,回发现报错

Lua C++交互 应用实例步骤(UserData使用)

 

 这是关键报错信息,重复main头文件,众所周知,main函数是启动函数;那就注释调main.

会发现,有两处main ,lua.c 中 int main 和luac.c int main,分别都注释了。(或者简单粗暴,直接将luc.c和luac.c直接删除也可以)

再点生成,成功。这两处main,其实就是如果你将此lua编码打包成exe,就是启动函数。但是我们这里不需要这边的main,我们自己新建的C++ 应用程序,是有自己的Main。

二.Hello.lua 运行

  新建Lua脚本,必须.lua 结尾。

Lua C++交互 应用实例步骤(UserData使用)

 

  1.关键API

  1)lua与C++交互,必须要一个虚拟栈。可通过lua_State* L = luaL_newstate(); 对于栈的介绍可参考:https://blog.csdn.net/shun_fzll/article/details/39120965,这里就不对栈作描述了。

  2)加载Lua文件,可通过 luaL_dofile 返回一个 int类型,返回结果不为0,则表示异常

  3)Lua有异常,会把返回结果返回到栈顶,也就是说报异常了,可以通过lua_tostring(L,-1)得到报啥错,再打印出来.

  4)lua_close 就是释放这个栈。

  5)对于C++调用 C的头文件,需要extern

 2.实例分析

1 #include <iostream> 2 #include <string.h> 3 using namespace std; 4 extern "C" 5 { 6 #include "lua.h" 7 #include "lualib.h" 8 #include "lauxlib.h" 9 } 10 int main() 11 { 12 std::cout << "Hello World!\n"; 13 lua_State* L = luaL_newstate(); 14 int Ret = luaL_dofile(L, "LuaHello.lua"); 15 if (Ret) 16 { 17 string strError = lua_tostring(L, -1); 18 cout << strError.c_str() << endl; 19 return -1; 20 } 21 22 lua_close(L); 23 return 0; 24 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpffjg.html