1, Q:为什么没有用Luaplus或是其他的Binder?
A: nice question! Luaplus不能满足我在linux下使用,其他的太庞大,我需要一个轻量级的。
2,Q:是原创吗?
A:NO, thanks to Matthew Harmon matt@matthewharmon.com,我按照自己的需求做了封装。
3,Q:它的优点是什么?
A:主要是它简单,基本能满足和C/C++交互的需求。它使用了lua_newthread来管理每一个脚本(性能有问题吗?)。它支持
事件的resume,另外把LuaDebugger也封装进来了,方便调试。
贴下接口头文件:
#ifndef ILUAENGINE_H
#defineILUAENGINE_H
#defineGTC_LP 0x0000//指针
#defineGTC_INT 0x0001//整型
#defineGTC_DOUBLE 0x0002//浮点型
#defineGTC_STRING 0x0003//字符串
//脚本数据类型定义
enum
{
SD_NUMBER=0,//数字类型
SD_STRING,//字符串类型
SD_TABLE,//表
};
structSSDTable
{
intnNum;
voidpValue;
};
//脚本参数对象
structSScriptParamObj
{
intnType;//参数类型, SD_NUMBER 或者 SD_STRING
union UScriptParam//参数值
{
intnNumber;//数字
charszString[64];//字符串
SSDTable stTable;
}unValue;
SScriptParamObj()
{
memset(this,0,sizeof(this));
}
voidoperator=(intnValue)
{
nType=SD_NUMBER;
unValue.nNumber=nValue;
}
voidoperator=(charstr)
{
nType=SD_STRING;
unValue.szString[0]=0;
if(str!=NULL)
{
strncpy(unValue.szString, str,sizeof(unValue.szString));
}
}
voidoperator=( SSDTable pT )
{
nType=SD_TABLE;
unValue.stTable.nNum=pT.nNum;
unValue.stTable.pValue=(void)pT.pValue;
}
};
structILuaScript
{
///
* @Param: szFileName - 脚本文件名
* @Return: NULL
* @Description: 调用一个脚本
/
virtualboolCallFile(constchar*szFileName)=0;
///
* @Param: szFuncName - 函数名 pIn, nInNum - 输入参数列表指针以及个数
* @Return: pRet, nRetNum - 返回参数列表指针以及个数
* @Description: 调用一个函数
/
virtualboolCallFunction(constcharszFuncName, SScriptParamObjpIn,
intnInNum, SScriptParamObjpRet,intnRetNum)=0;
///
* @Param: szString - 字符串指针
* @Return: NULL
* @Description: 调用一个字符串
/
virtualboolCallString(constcharszString)=0;
///
* @Param: NULL
* @Return: NULL
* @Description: NULL
/
virtualvoidShowLuaCallStack()=0;
};
structILuaManager
{
///
* @Param: NULL
* @Return: NULL
* @Description: NULL
/
virtualboolInitManager(IGameWorldpGameWorld)=0;
///
* @Param: NULL
* @Return: NULL
* @Description: NULL
/
virtualILuaScriptCreateScript()=0;
///
* @Param: NULL
* @Return: NULL
* @Description: NULL
/
virtualvoidUpdate(floatfElapse)=0;
///
* @Param: NULL
* @Return: NULL
* @Description: 注意如果是自己卸载一个script,请自己
手工管理这个script的指针,manager析构
的时候,会自动析构所有的script
/
virtualvoidUnlinkScript(ILuaScriptpScript)=0;
///
* @Param: NULL
* @Return: NULL
* @Description: NULL
/
virtualILuaScriptGetScript(constcharszScriptName)=0;
///
* @Param: NULL
* @Return: NULL
* @Description: NULL
*/
virtualvoidRelease()=0;
};
#endif
另外,还有一个高手写的binder,针对c++的object做了很好的封装,但我没有采用,因为我想要灵活一点的。
链接在下面,大家可以对比一下,给出评论
http://www.codeproject.com/KB/cpp/luaincpp.aspx
原文地址:
http://www.cppblog.com/zuhd/archive/2010/05/04/114346.html
原文链接: https://www.cnblogs.com/byfei/archive/2012/12/27/3112148.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/73794
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!