LuaPlus是Lua的C++增强,也就是说,LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C++进行合作,是比较好的一个选择。
LuaPlus目前版本为:LuaPlus for Lua 5.01 Distribution Build 1080 (February 28,2004)。大家可以到 http://luaplus.org/ 站点下载:
源码 ( http://wwhiz.com/LuaPlus/LuaPlus50_Build1081.zip)
目标码 ( http://wwhiz.com/LuaPlus/LuaPlus50_Build1081_Win32Binaries.zip)
介绍LuaPlus: 好用的Lua For C++扩展 沐枫网志
我将在下面说明,如何使用LuaPlus,以及如何更方便的让LuaPlus与C++的类合作无间。
LuaPlus目前版本为:LuaPlus for Lua 5.01 Distribution Build 1080 (February 28,2004)。大家可以到 http://luaplus.org/ 站点下载:
源码 ( http://wwhiz.com/LuaPlus/LuaPlus50_Build1081.zip)
目标码 ( http://wwhiz.com/LuaPlus/LuaPlus50_Build1081_Win32Binaries.zip)
介绍LuaPlus: 好用的Lua For C++扩展 沐枫网志
我将在下面说明,如何使用LuaPlus,以及如何更方便的让LuaPlus与C++的类合作无间。
1. 调用Lua脚本
2. 与Lua脚本互相调用
为Lua脚本设置变量
GetGlobals().SetNumber(
myvalue
,
123456
获得Lua变量的值
int
myvalue
=
state
GetGlobal(
).GetInteger();
调用Lua函数 LuaFunction < > luaPrint print );
luaPrint( Hello World/n );
让Lua调用C语言函数
add( a,0)"> b) { return a+b;}
state GetGlobals().RegisterDirect( add state print(add(3,4)) 让Lua调用C++类成员函数
class Test {public: int add( b)b;}} ;
Test test;
state );
调用Lua函数 LuaFunction < > luaPrint print );
luaPrint( Hello World/n );
让Lua调用C语言函数
add( a,0)"> b) { return a+b;}
state GetGlobals().RegisterDirect( add state print(add(3,4)) 让Lua调用C++类成员函数
class Test {public: int add( b)b;}} ;
Test test;
state );
3. 在Lua脚本中使用C++类
这个稍微有点小麻烦。不过,我包装了一个LuaPlusHelper.h的文件,它可以很轻松的完成这个工作。它的实现也很简单,大家可以从源码上来获得如何用纯LuaPlus实现同样的功能。
不过,这里仍然有一个限制没有解决:不能使用虚成员函数。不过考虑到我们仅是在Lua调用一下C++函数,并不是要将C++完美的导入到Lua,这个限制完全可以接受。
另外,类成员变量不能直接在Lua中访问,可以通过类成员函数来访问(比如SetValue/GetValue之类)。
下面是一个简单的C++类:
Logger
{
:
void LOGMEMBER(const char* message)
{
printf("In member function: %s/n }
Logger()
Constructing(%p)/nthis);
v =10;
}
virtual~Logger()
}
Logger( n)
-- Constructing[%d](%p)/n
Logger(Logger logger)
-- Constructing[%p](%p)/n);
logger->LOGMEMBER( Call From Constructor/n SetValue( val)
{
v val;
} GetValue()
{
v;
}
v;
} ;
{
:
void LOGMEMBER(const char* message)
{
printf("In member function: %s/n }
Logger()
Constructing(%p)/nthis);
v =10;
}
virtual~Logger()
@H_267_404@
Destructing(%p)/n);}
Logger( n)
-- Constructing[%d](%p)/n
Logger(Logger logger)
-- Constructing[%p](%p)/n);
logger->LOGMEMBER( Call From Constructor/n SetValue( val)
{
v val;
} GetValue()
{
v;
}
v;
} ;
导入到Lua脚本:
LuaClass
Logger
(state)
.create( ) 定义构造函数 Logger::Logger() .create ( Logger2 ) 定义构造函数 Logger::Logger(int) *> Logger3 定义构造函数 Logger::Logger(Logger*)
.destroy( Free 定义析构函数 Logger::~Logger() .destroy( __gc .def( lm & Logger::LOGMEMBER) 定义成员函数 Logger::LOGMEMBER(const char*) SetValue Logger::SetValue)
.def( GetValue Logger::GetValue);
.create( ) 定义构造函数 Logger::Logger() .create ( Logger2 ) 定义构造函数 Logger::Logger(int) *> Logger3 定义构造函数 Logger::Logger(Logger*)
.destroy( Free 定义析构函数 Logger::~Logger() .destroy( __gc .def( lm & Logger::LOGMEMBER) 定义成员函数 Logger::LOGMEMBER(const char*) SetValue Logger::SetValue)
.def( GetValue Logger::GetValue);