Lua中调用C++

今年的年假格外的长,毕竟武汉的肺炎是格外可怕(生怕我一身的菜鸡本领还没咋发挥就惨死肺炎之下!),前两天更是青白江地震,不知道住那附近的麻神感想如何~感谢咱的ZXTD公司,又延长了一周。
废寝忘食研究下个项目关于脚本的灵活开发方向时(前两天整到晚上两三点,差点把我要好的普通流感给整严重了,吓得这两天不到12点就睡觉),遇到反向在Lua中调用C++模块,然后出各种奇怪的问题,所以在此mark下。
本人的IDE是vs2017+vsCode

首先必须生成Dll,是的,Lua只识别Dll,别搞静态库,不支持的~
vs2017直接新建个空项目,项目中加入Lua的支持,改成生成Dll,为了方便可以把生成目标文件名写下,与你将要导出的最终函数中luaopen_XXX的"XXX"一致即可。
windows手工截图标注,别吐槽了
然后建立个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
于春节在家躲避武汉肺炎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值