lua State加载部分库

在lua中,通常我们用luaL_openlibs(L)加载所有的lub标准库,但是有时候我们想只加载部分,有没有什么好的办法呢?在luaproc看到如下办法:

static void registerlib( lua_State *L, const char *name, lua_CFunction f ) {lua_getglobal( L, "package" );lua_getfield( L, -1, "preload" );lua_pushcfunction( L, f );lua_setfield( L, -2, name );lua_pop( L, 2 );
}static void openlibs( lua_State *L ) {lua_cpcall( L, luaopen_base, NULL );lua_cpcall( L, luaopen_package, NULL );registerlib( L, "io", luaopen_io );registerlib( L, "os", luaopen_os );registerlib( L, "table", luaopen_table );registerlib( L, "string", luaopen_string );registerlib( L, "math", luaopen_math );registerlib( L, "debug", luaopen_debug );
}

int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);

Calls the C function func in protected mode. func starts with only one element in its stack, a light userdata containing ud. In case of errors, lua_cpcall returns the same error codes as lua_pcall, plus the error object on the top of the stack; otherwise, it returns zero, and does not change the stack. All values returned by func are discarded.

上面是5.1的做法。luaproc新做法如下:

 static void luaproc_reglualib( lua_State *L, const char *name,lua_CFunction f ) {lua_getglobal( L, "package" );lua_getfield( L, -1, "preload" );lua_pushcfunction( L, f );lua_setfield( L, -2, name );lua_pop( L, 2 );}static void luaproc_openlualibs( lua_State *L ) {requiref( L, "_G", luaopen_base, FALSE );requiref( L, "package", luaopen_package, TRUE );luaproc_reglualib( L, "io", luaopen_io );luaproc_reglualib( L, "os", luaopen_os );luaproc_reglualib( L, "table", luaopen_table );luaproc_reglualib( L, "string", luaopen_string );luaproc_reglualib( L, "math", luaopen_math );luaproc_reglualib( L, "debug", luaopen_debug );#if (LUA_VERSION_NUM == 502)luaproc_reglualib( L, "bit32", luaopen_bit32 );#endif#if (LUA_VERSION_NUM >= 502)luaproc_reglualib( L, "coroutine", luaopen_coroutine );#endif#if (LUA_VERSION_NUM >= 503)luaproc_reglualib( L, "utf8", luaopen_utf8 );#endif}

转载于:https://www.cnblogs.com/lsgxeva/p/7748625.html

lua State加载部分库相关推荐

  1. Lua 文件加载执行方法

    前言 这里需要写二个文件来做测试 FileLua用来做数据,FileLua2来加载文件 下面的代码在FlieLua2文件中调用运行 loadfile() 函数的参数里面需要写文件后缀.lua -- l ...

  2. lua/cocos加载动画以及可以使用加载纹理的方式来替换图片并且加载个人制作的艺术字体(fnt字体)

    1.加载spine/json(ExportJson)骨骼动画 现在用的比较多 local spineAnim = sp.SkeletonAnimation:create("base/res/ ...

  3. Lua重新加载Lua文件

    function CFModuleReload( moduleName)if UtilityHelper:getInnerTest() == 1 then CCFileUtils:sharedFile ...

  4. Unity toLua加载lua的流程

    1.Unity加载Lua文件的流程 Unity中我们要加载Lua文件调用的函数是:LuaState类中的DoFile("xxx").我们可以看到流程是: LuaState:DoFi ...

  5. cocos2x (c++/lua) spine 文件的预加载

    在之前,笔者写过一编博客,通过lua在加载场景加载spineAnimation动画精灵,保存在table中,然后在游戏中创建动画精灵时,提取加载好的spineAnimaiton中的 spSkeleto ...

  6. 插件使用之加载自定义lua脚本

    为什么80%的码农都做不了架构师?>>>    xmake里面的lua脚本加载插件,可以让你方便调试和编写一些自定义的lua脚本,这个时候xmake就是一个纯lua的加载引擎.. 例 ...

  7. Lua热更原理以及加载规则

    要实现Lua的热更新,首先要了解Lua的模块加载机制,热更新的核心就是替换package.loaded中的模块. 加载规则: 包管理库提供了从Lua中加载模块的基础库.只有一个导出函数直接放在全局环境 ...

  8. Unity之ToLua_lua文件打成AB包的加载

    Tolua提供了一个使用单例模式的LuaFileUtils类,这个类用来读取lua文件,可以根据自己的项目继承这个类来重写ReadFile方法. 首先我们得把打包好的lua文件加载进来,方便查找lua ...

  9. Flutter中ListView加载图片数据的优化

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. ** 你可能需要 CSDN 网易云课堂教程 掘金 EDU学院教程 知乎 Flutter系列文章 在使用ListView ...

最新文章

  1. 爬虫之xml和html的区别
  2. 36 张图梳理 Intellij IDEA 常用设置
  3. 直播回顾|基于格雷码结合相移技术的高鲁棒性高效率动态三维面形测量
  4. 堆,栈,内存泄露,内存溢出介绍
  5. 谈谈Mux与门电路的相互替换(包含实例分析)
  6. 【关于封装的那些事】 缺失封装 【关于封装的那些事】 泄露的封装 【关于封装的那些事】 不充分的封装 【图解数据结构】二叉查找树 【图解数据结构】 二叉树遍历...
  7. 【分布式】分布式事务解决方案概述
  8. Java学习笔记(一)--JDK环境
  9. php获取当前整点时间_8.PHP的日期和时间
  10. c语言中闰年 日期 天数 统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形
  11. Flash开发iOS应用全攻略(三)——如何使用iOS开发者授权以及如何申请证书
  12. Cobra命令行框架及使用
  13. 使用mysql innodb 使用5.7的json类型遇到的坑和解决办法
  14. BGP Ethernet Virtual Private Network技术原理
  15. 到底如何保证线程安全,总结得太好了!
  16. Android流媒体
  17. 综合决策支持系统的含义
  18. 图像处理--轮廓介绍及特征
  19. 基于JAVA的网上图书商城参考【数据库设计、源码、开题报告】
  20. 社区,v2ex;天才,livid and SAI

热门文章

  1. AcWing 853. 有边数限制的最短路(bellman的k边限制最短路)
  2. 笔记︱信用风险模型(申请评分、行为评分)与数据准备(违约期限、WOE转化)
  3. [tensorflow]tensorflow 2.1 函数API(The Functional API)
  4. Vue.js 2.6尝鲜
  5. React组件: 提取图片颜色
  6. python main函数
  7. shadow-cljs: JavaScript 依赖的实践
  8. 重读《JavaScript DOM编程艺术》(第一版)
  9. LeetCode – Refresh – Exceel Sheet Column Number
  10. [Share]前端开发大众手册(包括工具、网址、经验等)