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

lua 调用C++动态库

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

一.生成动态库dll:

1.去官网下载http://www.lua.org/versions.htm,下载lua5.1.5版本,lua5.2以后的有些函数时有改动的

2.下载后解压到一个文件夹中比如lua-5.1.5(本文安装的是lua5.1)

3.VS2015新建一个win32控制台程序,选动态库,空项目,如图


4.新建好工程后,把lua-5.1.5文件夹中的src文件夹拷贝进工程目录,如图所示


5.在解决方案里点击头文件,右键,添加->现有项,把src文件夹中的.h文件全部添加进来如图:


6.同理5步添加源文件,把src里的.c文件除了lua.c和luac.c两个文件不要添加进来,别的文件全部添加进来,如图


7.按Ctrl+Shift+A弹出对话框,分别添加MyDll.h和MyDll.cpp两个文件。分别添加代码

MyDll.h中添加:

#pragma once  
extern "C" {
#include "../src/lua.h"  //指定正确的路径
#include "../src/lualib.h"  
#include "../src/lauxlib.h"  
}


#ifdef LUA_EXPORTS  
#define LUA_API __declspec(dllexport)  
#else  
#define LUA_API __declspec(dllimport)  
#endif  


extern "C" LUA_API int luaopen_MyDll(lua_State *L);//定义导出函数


MyDll.cpp中添加代码:

#include <stdio.h>  
#include "MyDll.h"  
static int averageFunc(lua_State *L)
{
int n = lua_gettop(L);
double sum = 0;
int i;


/* 循环求参数之和 */
for (i = 1; i <= n; i++)
sum += lua_tonumber(L, i);


lua_pushnumber(L, sum / n);     //压入平均值  
lua_pushnumber(L, sum);         //压入和  


return 2;                       //返回两个结果  
}


static int sayHelloFunc(lua_State* L)
{
printf("hello world!");
return 0;
}


static const struct luaL_Reg myLib[] =
{
{ "average", averageFunc },
{ "sayHello", sayHelloFunc },
{ NULL, NULL }       //数组中最后一对必须是{NULL, NULL},用来表示结束      
};


int luaopen_MyDll(lua_State *L)
{
luaL_register(L, "ss", myLib);
return 1;       // 把myLib表压入了栈中,所以就需要返回1  
}

8.解决方案配置选择Release

9.按Ctrl+Shift+B键,生成解决方案,

如果是VS2015,应该会报错,大概如下

在解决方案下,选中此报错的文件,右键->属性->

添加_CRT_SECURE_NO_WARNINGS,就不会报错了。所有的文件都如此修改属性,直到正确生成dll文件为止

10.生成的dll如图所示:


11.随便在一个地方建个文件夹,把Mydll.dll拷贝进此文件夹中。在此文件夹中新建一个main.lua文件,输入代码:

require "MyDll"  
local ave,sum = ss.average(1,2,3,4,5)--参数对应堆栈中的数据  
print(ave,sum)  -- 3 15  
ss.sayHello()   -- hello world!

11.命令行运行输入 lua main.lua,如图
















鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
Lua解释器Lua解释器发布时间:2022-07-22
下一篇:
FreeSwitch LUA API —— Sessions发布时间: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