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代码。