LUA中绑定C对象的3种方法
Posted bywayboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LUA中绑定C对象的3种方法相关的知识,希望对你有一定的参考价值。
对于C 和LUA之间的对象绑定, 大致可以分为以下几种.
- 全集C对象指针.
- 生存周期完全由C控制的指针.
- 生存周期完全由LUA控制的指针.
针对以上3种场景, 我们可以用下面的方法进行对象绑定.
1. 在整个软件生存周期都有效的对象指针
这种类型的C对象, 不用关心C对象的生存周期. 可以使用 lua upvalue 来进行绑定.
static int lua_function_method1(lua_State * L)
{
you_c_ptr * obj = (you_c_ptr *)lua_touserdata(L, lua_upvalueindex(1)); //通过 upvalue 获取c对象
}
luaL_Reg lua_functions[] = {
{"method1", lua_function_method1},
{NULL, NULL}
};
int luaopen_cobject(lua_State * L)
{
## 直接返回一个方法表.即可
lua_newlibtable(L, lua_functions);
lua_pushlightuserdata(L, c_object_ptr);
luaL_setfuncs(L, lua_functions, 1);
return 1;
}
2. 不知道何时会失效的C对象.
这类对象的生存周期不确定, 比如一个网络连接, 在你的程序运行的任何时间它都有可能失效(比如:连接断开了). 可以给C对象增加一个引用计数, 同时使用匿名元表的方式来绑定到lua对象.
/*
绑定对象的工具函数
Lua 虚拟机指针, 方法表, 方法数目, upvalue数, __index 原方法(没有可以提供 NULL)
*/
in
以上是关于LUA中绑定C对象的3种方法的主要内容,如果未能解决你的问题,请参考以下文章