• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

编写Lua调用C/C++库的动态库文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

编写Lua调用C/C++的接口

环境:VS2017 commity 、Lua3.4

在VS2017中创建一个空项目,项目MyUtil。

鼠标右键项目,配置选“所有配置”,平台选“所有平台”。

常规:

输出目录:$(SolutionDir)..\bin\$(Platform)\$(Configuration)\

中检目录:$(SolutionDir)..\bintemp\$(Platform)\$(ProjectName)\$(Configuration)\

项目默认值中,配置类型选“动态库(.dll)”

 

 我将下载好的lua源码和这个项目放在同一个目录下,luasrc是所有lua源码。

 

 在项目中,添加interface.cpp文件,文件中的代码。

 1 #include <windows.h>
 2 //使用 lua标准头文件
 3 #include "../luasrc/lua.hpp"
 4 
 5 //累计传入参数的和
 6 static int util_sums(lua_State *L) {
 7     int number = lua_gettop(L);//获取参数个数
 8 
 9     lua_Number sum = 0.0;//定义累计值
10     for (int i = 1; i <= number; ++i) {
11         if (!lua_isnumber(L, i)) {//第i参数
12             lua_pushliteral(L, "参数有错");
13             lua_error(L);//抛出异常
14         }
15         sum += lua_tonumber(L, i);//将第i个参数转换为浮点数,加到sum上
16     }
17     lua_pushnumber(L, sum);//将累计值压入栈
18     lua_pushstring(L, "爱白菜的小昆虫");//再压个字符串进栈
19     return 2;//返回值的个数
20 }
21 
22 //定义注册表
23 static const luaL_Reg util[] = {
24     // lua使用的名字,这里的函数名字
25     {"xqlSums", util_sums},
26     {NULL, NULL}
27 };
28 
29 //以C语言方式导出luaopen_MyUtil函数
30 extern "C" __declspec(dllexport)
31 int luaopen_MyUtil(lua_State *L) {//函数接口规则:luaoepn_编译的库名字
32     luaL_newlib(L, util);//将函数名和函数注册
33     return 1;
34 }
View Code

鼠标右键项目,点击链接器->常规->附加库目录。

$(SolutionDir)..\bin\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories)

点击链接器->输入->附加依赖项:luadll.lib(自己拿到lua源码编译的动态库,生成之后的lib文件。)

 

 

 

 

将项目编译生成动态库文件。

使用VS 2017的开发人员命令提示符,到生成的目录,使用

dumpbin /exports MyUtil.dll 查看是否导出函数

 

 在库目录下,新建一个txt文件,修改名字为test.lua

 

 lua代码

local obj = require("MyUtil")

print(obj.xqlSums(1, 2, 3, 4, 5, 6))

在命令行中,用lua解析器执行test.lua

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
让XcodeLua语法高亮发布时间:2022-07-22
下一篇:
lua取随机数发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap