因为懒得写,所以源码是在这里拷贝过来的,
这里讲一下配置开发的过程。
上一讲提到了VS2019编译开发lua了,在编译好了之后,我们在这里使用一下。
首先新建一个dll工程,名字随便取,注意和后面的调用保持一致就OK了,我这里就叫“test_luaDll1”,源码内容如下,
//#include "pch.h"
//#include "msg.h"
//生成的dll 是 lua_add53.dll
//luaopen_lua_add
extern "C" {
#include "E:/wLua/luaVsProject/luaVsStaticLib/src/lua.h"
#include "E:/wLua/luaVsProject/luaVsStaticLib/src/lualib.h"
#include "E:/wLua/luaVsProject/luaVsStaticLib/src/lauxlib.h"
};
#pragma comment(lib, "E:/wLua/luaVsProject/x64/Debug/luaVsDll.lib")
#include <iostream>
using namespace std;
extern "C" int ShowMsg(lua_State * luaEnv) {
cout << "Hello world from clibs!" << endl;
return 0; // 返回值个数为0个.
}
extern "C" int sub2(lua_State * L)
{
double op1 = luaL_checknumber(L, 1);
double op2 = luaL_checknumber(L, 2);
int temp = op1 - op2;
lua_pushnumber(L, temp);
return 1;
}
// part one: 要导出的函数列表
static luaL_Reg luaLibs[] = {
{ "ShowMsg", ShowMsg},
{ "sub2", sub2},
{ NULL, NULL }
};
// part two: DLL入口函数,Lua调用此DLL的入口函数.
extern "C" __declspec(dllexport)
int luaopen_test_luaDll1(lua_State * luaEnv) {
//WinFeature是modole名, 将来require这个名字
//lua_register(luaEnv, "ShowMsg", ShowMsg); //关键一行, 在luaState上注册好这个lib
//lua_register(luaEnv, "sub2", sub2); //关键一行, 在luaState上注册好这个lib
lua_newtable(luaEnv);
luaL_setfuncs(luaEnv, luaLibs, 0);
return 1;
}
编译后会生一个叫test_luaDll1.dll的文件,把这个文件和下面这个test.lua放在一起,
local mytest = require "test_luaDll1"
mytest.ShowMsg();
print(mytest.sub2(1,2));
如何使用lua
然后,运行指令
lua test.lua
运行完了你会看到下面的输出
Hello world from clibs!
-1.0
如图,
如何使用luac
关于luac的介绍这里有,
简单地说,这个和python的pyc文件非常类似,就是把.lua文件变成二进制文件,
E:\wLua\test_luaDll1\x64\Debug>luac test.lua
E:\wLua\test_luaDll1\x64\Debug>dir
2022/04/17 19:58 <DIR> .
2022/04/17 19:58 <DIR> ..
2022/04/17 19:58 182 luac.out
2022/04/17 19:51 182 test.exe
2022/04/17 18:50 82 test.lua
2022/04/17 19:49 66,560 test_luaDll1.dll
2022/04/17 19:49 756 test_luaDll1.exp
2022/04/17 19:49 1,900 test_luaDll1.lib
2022/04/17 19:49 1,527,808 test_luaDll1.pdb
7 个文件 1,597,470 字节
3 个目录 801,822,638,080 可用字节
E:\wLua\test_luaDll1\x64\Debug>lua luac.out
Hello world from clibs!
-1.0
从上面的运行结果可以看到,luac把test.lua变成了luac.out,这个是二进制格式的,然后通过lua.exe照样可以调用。当然,如果你希望生成的二进制文件名称有所不同,可以使用下面的指令、
luac -o myname.out test.lua、
然后,就可以这样调用了,
lua myname.out
本文结束。