加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua调用C/C++函数

发布时间:2020-12-14 22:07:03 所属栏目:大数据 来源:网络整理
导读:Lua个C/C++只能通过堆栈通信,当我们需要调用C/C++函数时,函数都必须满足以下函数签名: typedef int (*lua_CFunction) (lua_State *L); 由以上函数式可知所有函数都要接收一个lua_State作为参数,同时返回一个整数值。 int capi_gettickcount(lua_State *L

Lua个C/C++只能通过堆栈通信,当我们需要调用C/C++函数时,函数都必须满足以下函数签名:

typedef int (*lua_CFunction) (lua_State *L);

由以上函数式可知所有函数都要接收一个lua_State作为参数,同时返回一个整数值。

int capi_gettickcount(lua_State *L){
    struct timeval now;
    gettimeofday(&now,nullptr);
    long time_stamp = now.tv_sec * 1000 + now.tv_usec / 1000;
    lua_pushnumber(L,time_stamp); // 入栈
    
    return 1; // 返回值个数
}

上面的函数注册到Lua

void capi_lua_register(lua_State *L){ // 这里的 lua_State *L 是获取Lua中的
    lua_register(L,"capi_gettickcount",capi_gettickcount); // 注册
}

博主是在cocos2d-x 3.2中,AppDelegate.cpp中获取的:

auto engine = LuaEngine::getInstance();
    ScriptEngineManager::getInstance()->setScriptEngine(engine);

    LuaStack* stack = engine->getLuaStack();
    stack->setXXTEAKeyAndSign("2dxLua",strlen("2dxLua"),"XXTEA",strlen("XXTEA"));
    
    //register custom function
    //LuaStack* stack = engine->getLuaStack();
    //register_custom_function(stack->getLuaState());
     capi_lua_register(stack->getLuaState());


Lua中调用:

-- 获取本地时间戳-毫秒

local stamp = capi_gettickcount()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读