Lua中调用C++
2020-02-29 21:10
405 查看
今年的年假格外的长,毕竟武汉的肺炎是格外可怕(生怕我一身的菜鸡本领还没咋发挥就惨死肺炎之下!),前两天更是青白江地震,不知道住那附近的麻神感想如何~感谢咱的ZXTD公司,又延长了一周。
废寝忘食研究下个项目关于脚本的灵活开发方向时(前两天整到晚上两三点,差点把我要好的普通流感给整严重了,吓得这两天不到12点就睡觉),遇到反向在Lua中调用C++模块,然后出各种奇怪的问题,所以在此mark下。
本人的IDE是vs2017+vsCode
首先必须生成Dll,是的,Lua只识别Dll,别搞静态库,不支持的~
vs2017直接新建个空项目,项目中加入Lua的支持,改成生成Dll,为了方便可以把生成目标文件名写下,与你将要导出的最终函数中luaopen_XXX的"XXX"一致即可。
然后建立个cpp文件就开写:
#include<lua.hpp> #include<string> #include<vector> using std::vector; using std::string; //目标函数1 static int addFunc(lua_State*L) { double a = luaL_checknumber(L, 1); double b = luaL_checknumber(L, 2); auto c{ a * 2 + b }; lua_pushnumber(L, c); return 1; } //目标函数2 static int subFunc(lua_State*L) { double a = luaL_checknumber(L, 1); double b = luaL_checknumber(L, 2); auto c{ a - b }; lua_pushnumber(L, c); return 1; } //是的,我这里试过了,vector是可行的!比原始的C数组安逸多了,美滋滋~~~ //函数格式化入容器 static const vector<luaL_Reg> ve{ {"add",addFunc}, {"sub",subFunc}, {nullptr,nullptr} }; //这里是唯一的需要导出的函数,函数名必须是luaopen_开头 __declspec(dllexport) int luaopen_theDll(lua_State*L) { luaL_newlib(L,&ve[0]); return 1; }
然后建立个资源文件.def,导入刚刚手打的导出函数
LIBRARY EXPORTS luaopen_theDll
嗯嗯,生成ing…
好了,dll准备完毕,丢到你想丢的位置去~
接下来是vsCode的Lua,注意咯,记得要在package.cpath中加入你丢dll的地方(不是path!不是path!不是path!),然后就可以愉快的获得模块了:
package.cpath=";;"..package.cpath.."/../temp/?.dll" local tab=require("theDll") v=tab.add(10.1,5.5) v2=tab.sub(10.8,2.4) print(v,v2)
Zr
2020-02-05
于春节在家躲避武汉肺炎
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- c/c++与lua相互调用
- (转载)lua和c/c++互相调用实例分析
- lua和c/c++互相调用实例分析
- lua调用c++dll 简单案例
- Lua教程(三):C语言、C++中调用Lua的Table示例
- tolua(二) C++调用lua
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- C++用LuaIntf调用Lua代码示例
- 在Lua中调用C++函数
- c++ 调用lua 函数 之lua堆栈操作
- C++调用Lua教程
- c++中让lua绑定类,使lua直接调用c++中定义的类
- 用SWIG实现C++和Lua互相调用实例
- C++调用lua编译报错
- Lua学习笔记(6) : 在Lua中调用C++之函数
- Lua中调用C++函数示例
- C/C++中调用LUA函数
- Lua在vs2013的配置环境以及C++如何调用lua
- 关于Lua调用c++ DLL 文件的详解
- lua调用c++