tolua++绑定C/C++语言函数供lua调用

论坛 期权论坛 脚本     
匿名技术用户   2021-1-3 08:00   11   0

1,C/C++提供给lua的接口写在ScriptAPI_*.h和ScriptAPI_*.cpp中(根据模块可以分为多个文件)。为简化问题,要求接口参数为简单数据类型(number、string),且全部为入参,返回值只有一个,类型为int,一般表示错误码。

2,如果需要的话,可以在ScriptAPI.pkg中嵌入lua代码,这些代码在调用生成的绑定接口tolua_pkgname_open时执行。

3,执行ScriptAPIBind.bat脚本(内容如下)生成接口绑定代码文件ScriptAPIBind.h(生成这一个文件即可)。

4,在程序中调用tolua_ pkgname_open(或luaopen_pkgname)进行接口注册,其中会执行“2”中嵌入的lua代码。注意编译时要链接到tolua++.lib。

/* ScriptAPI_Pet.h */ // 注意文件命名格式:ScriptAPI_modulename.h

#ifndef ScriptAPI_Pet_H_

#define ScriptAPI_Pet_H_

// tolua_begin

// 绑定常量

namespace pet_prop // 支持namespace

{

enum EPropIdx // 在lua中使用pet_prop.PROP_GENDER

{

PROP_MIN = 0,

PROP_CID,

PROP_TYPE,

PROP_GENDER,

PROP_QUALITY,

PROP_GENERATION,

PROP_LV,

PROP_LIFE,

PROP_PHY,

PROP_EXP,

PROP_MAX

};

// 绑定全局变量

const char* PropNameTable[PROP_MAX]; // 注意lua中数组下标是从1开始的。在lua中使用pet_prop.PropNameTable[idx]

}

int C_Pet_AddPet(int actorFID, int petID,int taskID); // 接口名以C_modulename_开头。非只读接口要传入taskid,记录日志使用

int C_Pet_DelPet(int actorFID, int petFID,int taskID);

// tolua_end

#endif /* ScriptAPI_Pet_H_ */

/* ScriptAPI_Pet.cpp */

#include "ScriptAPI_Pet.h"

namespace pet_prop

{

const char* PropNameTable[PROP_PET_MAX] =

{

"",

"ID",

"类型",

"性别",

"品质",

"代数",

"等级",

"寿命",

"体力",

"经验",

""

};

}

int C_Pet_AddPet(int actorFID, int petID,int taskID)

{

return 0;

}

int C_Pet_DelPet(int actorFID, int petFID,int taskID)

{

return 0;

}

/* ScriptAPI_Fmt.h */

#ifndef ScriptAPI_Fmt_H_

#define ScriptAPI_Fmt_H_

// tolua_begin

int C_Fmt_GetDefaultFmt(int actorFID);

const char* C_Fmt_GetFmtName(int fmtID, intfmtLv);

int C_Fmt_CreateXXTrigger(int actorID, inttaskID, const char* callback); // callback是回调的lua接口名

// tolua_end

#endif /* ScriptAPI_Fmt_H_ */

/* ScriptAPI_Fmt.cpp */

#include "ScriptAPI_Fmt.h"

int C_Fmt_GetDefaultFmt(int actorFID)

{

return 1;

}

const char* C_Fmt_GetFmtName(int fmtID, intfmtLv)

{

return "";

}

int C_Fmt_CreateXXTrigger(int actorID, inttaskID, const char* callback)

{

return 1;

}

/* ScriptAPI.pkg */

$hfile "ScriptAPI_Pet.h"

$hfile "ScriptAPI_Fmt.h"

$[

-- 嵌入的lua代码

function add(a, b)

return (a + b)

end

$]

/* ScriptAPIBind.bat */

::tolua -S -n pkgname -o myfile.cmyfile.pkg [-S 关闭对string类型的支持 -n指定pkg名–o 指定输出文件名]

tolua++.exe -S -n ScriptAPI -oScriptAPIBind.h ScriptAPI.pkg

pause

在C/C++中调用生成的绑定文件中的TOLUA_API int tolua_ScriptAPI_open (lua_State* tolua_S)函数即可,其中进行导出函数的注册以及执行嵌入的lua代码。


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP