- 1
- 0
- 约4.79千字
- 约 5页
- 2019-07-06 发布于江西
- 举报
如何在C++中集成Lua 脚本(LuaPlus篇)
学习各种外挂制作技术,马上去百度搜索 魔鬼作坊 点击第一个站进入、快速
成为做挂达人。
去年我作了一个Lua 脚本的C++包装,有许多朋友感兴趣,并尝试使用,我感到受宠若惊。
事实上,我作的包装,学习的目的比较强,它还是有许多缺陷的。为了让朋友们少走弯路,
我推荐使用LuaPlus 作为C++的包装。
LuaPlus是Lua 的C++增强,也就是说,LuaPlus本身就是在Lua 的源码上进行增强得来的。
用它与C++进行合作,是比较好的一个选择。
LuaPlus 目前版本为:LuaPlus forLua 5.01Distribution Build 1080 (February28,2004)。大家
可以到站点下载:
我将在下面说明,如何使用LuaPlus,以及如何更方便的让LuaPlus与C++的类合作无间。
1. 调用Lua 脚本
// 创建Lua 解释器:
LuaStateOwnerstate;
// 执行Lua 脚本:
state-DoString(print(Hello World\n));
// 载入Lua 脚本文件并执行:
state-DoFile(C:\\test.lua);
// 载入编译后的Lua 脚本文件并执行:
state-DoFile(C:\\test.luac);
2. 与Lua 脚本互相调用
// 为Lua 脚本设置变量
state-GetGlobals().SetNumber(myvalue, 123456);
// 获得Lua 变量的值
int myvalue =state-GetGlobal(myvalue).GetInteger();
// 调用Lua 函数
LuaFunctionint luaPrint= state-GetGlobal(print);
luaPrint(Hello World\n);
// 让Lua 调用C 语言函数
int add(int a, int b){returna+b;}
state-GetGlobals().RegisterDirect(add, add);
state-DoString(print(add(3,4)));
// 让Lua 调用C++类成员函数
classTest{public: int add(int a,int b){returna+b;}};
Testtest;
state-GetGlobals().RegisterDirect(add, test,add);
state-DoString(print(add(3,4)));
3. 在Lua 脚本中使用C++类
这个稍微有点小麻烦。不过,我包装了一个 LuaPlusHelper.h的文件,它可以很轻松的
完成这个工作。它的实现也很简单,大家可以从源码上来获得如何用纯LuaPlus 实现同样的
功能。
不过,这里仍然有一个限制没有解决:不能使用虚成员函数。不过考虑到我们仅是在
Lua 调用一下C++函数,并不是要将C++完美的导入到Lua,这个限制完全可以接受。
另外,类成员变量不能直接在 Lua 中访问,可以通过类成员函数来访问(比如
SetValue/GetValue 之类)。
// 下面是一个简单的C++类:
classLogger
{
public:
void LOGMEMBER(const char*message)
{
printf(In memberfunction: %s\n, message);
}
Logger()
{
printf(Constructing(%p)...\n,this);
v= 10;
}
virtual ~Logger()
{
printf(Destructing(%p)...\n,this);
}
Logger(int n)
{
printf(--Constructing[%d](%p)...\n,n,this);
}
Logger(Logger* logger)
{
printf(--Constructing[%p](%p)...\n,logger,this);
logge
原创力文档

文档评论(0)