#Lua:Lua调用C++生成的DLL库
Lua调用C++生成的DLL库
本文参考了某大佬的博客,写得十分详细,推荐!!!
需求:
在之前的求解器中添加了Lua库,使得程序可以在Lua脚本中实现自定义函数功能,考虑到未来可能需要与第三方程序库进行耦合计算,现在想到可以借助Lua脚本,在脚本中调用第三方动态库,以实现其功能的扩展。接下来将要简要记录下Lua中调用第三方库的实现过程。
编译Lua库
在windows平台下,借助mingw编译器进行编译。
首先需要去下载Lua源代码,这里下载的是最新的Lua5.4
在安装路径下进行编译,源码中已经写好了Makefile,可以直接进行编译
mingw32-make mingw
mingw32-make install local
在install目录下得到lua.exe,lua54.dll,liblua.a 等可执行文件,动态库与静态库
C++编写DLL接口
以下给出了一个示例,注释比较详细
cpp2dll.cpp
#include
#include "lua.hpp"
#include
#include
#include
// 函数示例:参数输入顺序
int Lua_printf(lua_State *L)
{
int n = lua_gettop(L); // 判断输入参数个数
switch (n)
{
case 0:
std::cout
编译DLL
编译时需要链接到Lua生成的静态库,所以g++编译时需要指定lua头文件路径,以及静态库路径,编译命令如下
g++ cpp2dll.cpp -O3 -o cpp2dll.dll -shared -fPIC -I ./lua54/include -L absolute/path/to/lua54/lib -llua54
至此生成得Lua可以识别的动态链接库cpp2dll.dll
Lua中调用DLL
编写如下的Lua脚本
test.lua
local cpp2dll = require("cpp2dll")
cpp2dll.printf()
cpp2dll.printf(0,1,2,3)
a=2
b=10
print(a,"^",b,"=",cpp2dll.pow(a,b))
print(b,"^",a,"=",cpp2dll.pow(b,a))
lua.exe 执行test.lua脚本
得到如下输出
cmd$ lua.exe test.lua
start luaopen_lib
end luaopen_lib
intput Para Number is 0
intput Para is 4
0 1 2 3
a=2|b=10|re=1024
2 ^ 10 = 1024.0
a=10|b=2|re=100
10 ^ 2 = 100.0
最后,在Lua脚本中成功调用C++编写的动态链接库
文章来源于互联网:#Lua:Lua调用C++生成的DLL库
THE END
二维码