封装LuaEngine

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也封装进来了,方便调试。



贴下接口头文件:

封装LuaEngine#ifndef ILUAENGINE_H

封装LuaEngine
#defineILUAENGINE_H

封装LuaEngine

封装LuaEngine
#defineGTC_LP 0x0000//指针

封装LuaEngine
#defineGTC_INT 0x0001//整型

封装LuaEngine
#defineGTC_DOUBLE 0x0002//浮点型

封装LuaEngine
#defineGTC_STRING 0x0003//字符串

封装LuaEngine

封装LuaEngine
//脚本数据类型定义

封装LuaEngine
enum

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine SD_NUMBER
=0,//数字类型

封装LuaEngine
SD_STRING,//字符串类型

封装LuaEngine
SD_TABLE,//

封装LuaEngine
}
;

封装LuaEngine

封装LuaEngine
structSSDTable

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine
intnNum;

封装LuaEngine
voidpValue;

封装LuaEngine}
;

封装LuaEngine

封装LuaEngine
//脚本参数对象

封装LuaEngine
structSScriptParamObj

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine
intnType;//参数类型, SD_NUMBER 或者 SD_STRING

封装LuaEngine


封装LuaEngine union UScriptParam
//参数值

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine
intnNumber;//数字

封装LuaEngine
charszString[64];//字符串

封装LuaEngine
SSDTable stTable;

封装LuaEngine

封装LuaEngine }
unValue;

封装LuaEngine

封装LuaEngine SScriptParamObj()

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine memset(
this,0,sizeof(
this));

封装LuaEngine }


封装LuaEngine

封装LuaEngine
voidoperator=(intnValue)

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine nType
=SD_NUMBER;

封装LuaEngine unValue.nNumber
=nValue;

封装LuaEngine }


封装LuaEngine

封装LuaEngine
voidoperator=(charstr)

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine nType
=SD_STRING;

封装LuaEngine unValue.szString[
0]=0;

封装LuaEngine

封装LuaEngine
if(str!=NULL)

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine strncpy(unValue.szString, str,
sizeof(unValue.szString));

封装LuaEngine }


封装LuaEngine }


封装LuaEngine

封装LuaEngine
voidoperator=( SSDTable pT )

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine nType
=SD_TABLE;

封装LuaEngine unValue.stTable.nNum
=pT.nNum;

封装LuaEngine unValue.stTable.pValue
=(void
)pT.pValue;

封装LuaEngine }


封装LuaEngine

封装LuaEngine}
;

封装LuaEngine

封装LuaEngine
structILuaScript

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine封装LuaEngine
///

封装LuaEngine * @Param: szFileName - 脚本文件名

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: 调用一个脚本

封装LuaEngine
/


封装LuaEngine
virtualboolCallFile(constchar*szFileName)=0;

封装LuaEngine

封装LuaEngine封装LuaEngine
/
//

封装LuaEngine * @Param: szFuncName - 函数名 pIn, nInNum - 输入参数列表指针以及个数

封装LuaEngine * @Return: pRet, nRetNum - 返回参数列表指针以及个数

封装LuaEngine * @Description: 调用一个函数

封装LuaEngine
/


封装LuaEngine
virtualboolCallFunction(constcharszFuncName, SScriptParamObjpIn,

封装LuaEngine
intnInNum, SScriptParamObjpRet,intnRetNum)=0;

封装LuaEngine

封装LuaEngine封装LuaEngine
/
//

封装LuaEngine * @Param: szString - 字符串指针

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: 调用一个字符串

封装LuaEngine
/

封装LuaEngine
virtualboolCallString(constchar
szString)=0;

封装LuaEngine

封装LuaEngine封装LuaEngine
///

封装LuaEngine * @Param: NULL

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: NULL

封装LuaEngine
/


封装LuaEngine
virtualvoidShowLuaCallStack()=0;

封装LuaEngine}
;

封装LuaEngine

封装LuaEngine
structILuaManager

封装LuaEngine封装LuaEngine
封装LuaEngine{

封装LuaEngine封装LuaEngine
/
//

封装LuaEngine * @Param: NULL

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: NULL

封装LuaEngine
/


封装LuaEngine
virtualboolInitManager(IGameWorldpGameWorld)=0;

封装LuaEngine封装LuaEngine
/
//

封装LuaEngine * @Param: NULL

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: NULL

封装LuaEngine
/

封装LuaEngine
virtualILuaScript
CreateScript()=0;

封装LuaEngine封装LuaEngine
///

封装LuaEngine * @Param: NULL

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: NULL

封装LuaEngine
/


封装LuaEngine
virtualvoidUpdate(floatfElapse)=0;

封装LuaEngine封装LuaEngine
/
//

封装LuaEngine * @Param: NULL

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: 注意如果是自己卸载一个script,请自己

封装LuaEngine 手工管理这个script的指针,manager析构

封装LuaEngine 的时候,会自动析构所有的script

封装LuaEngine
/


封装LuaEngine
virtualvoidUnlinkScript(ILuaScriptpScript)=0;

封装LuaEngine封装LuaEngine
/
//

封装LuaEngine * @Param: NULL

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: NULL

封装LuaEngine
/

封装LuaEngine
virtualILuaScript
GetScript(constcharszScriptName)=0;

封装LuaEngine封装LuaEngine
/
//

封装LuaEngine * @Param: NULL

封装LuaEngine * @Return: NULL

封装LuaEngine * @Description: NULL

封装LuaEngine
*/

封装LuaEngine
virtualvoidRelease()=0;

封装LuaEngine}
;

封装LuaEngine
#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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午4:05
下一篇 2023年2月9日 下午4:06

相关推荐