LUA中绑定C对象的3种方法

Posted bywayboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LUA中绑定C对象的3种方法相关的知识,希望对你有一定的参考价值。

对于C 和LUA之间的对象绑定, 大致可以分为以下几种.

  1. 全集C对象指针.
  2. 生存周期完全由C控制的指针.
  3. 生存周期完全由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种方法的主要内容,如果未能解决你的问题,请参考以下文章

LUA中绑定C对象的3种方法

LUA中绑定C对象的3种方法

slua中,绑定lua文件到Monobehavior的一种方法

AWTK javascript绑定原理

第十六章 C++与Lua的相互绑定之ELuna

Lua 面向对象