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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |