Skip to content

Releases: Tencent/xLua

v2.1.12

09 Jul 03:04
Compare
Choose a tag to compare

新增特性

  • 1、Nullable的支持
  • 2、支持Assembly-CSharp之外的dll注入(beta)
  • 3、执行xlua.hotfix,会自动让该类private能访问
  • 4、xlua.private_accessible优化:1、会把基类的也设置能私有访问;2、延迟到第一次访问类才私有化
  • 5、新增xlua.util.state,可为一个c#对象新增状态
  • 6、this[string field]或者this[object field]操作符重载新增get_Item和set_Item调用
  • 7、正在编译时注入打印error信息
  • 8、interface配置到CSharpCallLua时的事件跟索引映射的自动实现
  • 9、unity5.5以上去掉WARNING: The runtime version supported by this application is unavailable打印

变更

  • 1、去除Stateful方式(因为xlua.util.state已经可以达成类似的效果)
  • 2、废弃掉内嵌模式模式

bug修复

  • 1、生成代码局部变量加下划线,防止符号冲突
  • 2、如果类没放到Hotfix列表,不生成base调用代理
  • 3、代码重构,可读性优化
  • 4、解决带params byte[]可能会导致生成代码编译错误的问题
  • 5、解决类含有private event的时候,无法xlua.private_accessible的问题
  • 6、构造函数注入,如果branch外紧跟Ret指令,注入逻辑应该在branch以及Ret之间
  • 7、构造函数注入,如果注入指令后导致跳转范围大于一个字节,应修改为长跳转
  • 8、解决一个delegate如果不是某个类的内嵌类型时,CS.namespace.classname为空的问题
  • 9、防止Editor下的Util类名字冲突
  • 10、泛型override有异常,先过滤掉
  • 11、解决空enum导致生成代码编译错误
  • 12、解决uwp平台下il2cpp方式打包无法访问任何类的问题
  • 13、hotfix一个私有类型的params参数的函数,导致生成代码编译错误、注入失败的问题
  • 14、如果两个LuaBase指向的是同一个Lua对象,GetHashCode应该返回的是同一个值
  • 15、[Out]标记参数生成代码编译失败
  • 16、交错数组+多维数组的复合,生成代码报错的问题

patch:修正2.1.11版本hotfix之后ios编译不过的bug

13 Apr 07:17
Compare
Choose a tag to compare

覆盖Tools目录下对应文件即可

v2.1.11

20 Mar 03:42
Compare
Choose a tag to compare

新增特性

  • 1、xlua.private_accessible支持私有内嵌类型
  • 2、添加xlua.release,用于主动解除lua对c#某对象的引用
  • 3、支持内嵌委托的显示构造
  • 4、需要传class的地方(比如xlua.private_accessible),支持传C#的Type对象
  • 5、支持用pairs遍历IEnumerable对象
  • 6、热补丁场景下,支持override函数调用被override函数(对应c# base关键字)

变更

  • 1、简化property的反射访问,简化后有更好的兼容性;

bug修复

  • 1、ios 11兼容(去除system调用)
  • 2、实现了interface的struct不走gc优化代码的问题
  • 3、emit特性的.net兼容性
  • 4、emit对于ulong的const值处理不当
  • 5、interface桥接代码,interface继承时,父interface和子interface有同名不同类型属性时的生成代码报错
  • 6、多虚拟机下,不断创建和销毁协程时,可能出现协程指针重复
  • 7、当参数为泛型类型时,如ICollectio时,不应该生成代码

v2.1.10 patch

25 Sep 11:22
Compare
Choose a tag to compare
  • 1、解决2.1.10的window plugins库依赖vc运行时的问题;
  • 2、解决如果一个类没有成员函数,但有成员事件时,编辑器下不生成代码unity崩溃的问题;

v2.1.10

18 Sep 08:32
Compare
Choose a tag to compare

新增特性

  • 1、新增DoNotGen配置,支持一个类型部分函数用反射,部分用生成;
  • 2、新增wrapper的emit;
  • 3、webgl支持;
  • 4、lua实现interface支持interface继承;
  • 5、window下支持android编译(由xdestiny110提供);
  • 6、打包时,如果没执行过“Generate Code”将报错;

变更

  • 1、async_to_sync的改为resume错误时报错;
  • 2、il2cpp下,暂时去掉泛型的反射调用;
  • 3、升级到lua5.3.4并合入2017-9-1为止所有官方patch;

bug修复

  • 1、C#仅声明delegate和MulticastDelegate,通过反射创建lua function映射时crash;
  • 2、解决一些古老版本window(比如xp)的dll兼容问题;

v2.1.9 text段优化

10 Aug 08:01
Compare
Choose a tag to compare

安装说明

  • xlua_v2.1.9.zip是lua53版本(Unity)
  • xlua_v2.1.9_luajit.zip是luajit版本(Unity)
  • xlua_v2.1.9_general.zip是通用版本(非Unity)

新增特性

  • 1、新增最小生成模式(通过GEN_CODE_MINIMIZE切换),可以节省50%的text段空间;
  • 2、新增xlua.util.createdelegate,支持在lua直接用C#函数创建delegate而不需要通过lua适配;
  • 3、xlua.private_accessible支持public int Prop { get; private set; }
  • 4、新增 xlua.getmetatable、xlua.setmetatable、xlua.setclass、xlua.genaccessor,用以支持lua使用C#类型直接在lua侧完成;
  • 5、反射下扩展方法的支持;
  • 6、lua53版本支持位操作符重载:C#侧的位操作符重载对应到lua的位操作符重载;enum全部加上&和|位操作符;

工程优化

  • 1、加入travis持续集成;

变更

  • 1、LuaCallCSharp自动去除匿名类型;
  • 2、THREAD_SAFT改为THREAD_SAFE;
  • 3、GenFlag.GCOptimize标记为过时;
  • 4、删除过时的GenConfig配置方式;

bug修复

  • 1、window phone下一些系统api是禁用的,源码中去掉;
  • 2、泛型约束是struct的时候,生成代码失败;
  • 3、unity2017 .net 4.6,枚举生成代码报错;

v2.1.8

27 Jun 03:56
Compare
Choose a tag to compare

安装说明

  • xlua_v2.1.8.zip是lua53版本(Unity)
  • xlua_v2.1.8_luajit.zip是luajit版本(Unity)
  • xlua_v2.1.8_general.zip是通用版本(非Unity)

新增特性

  • 1、Hotfix标签添加几个订制参数:ValueTypeBoxing、IgnoreProperty、IgnoreNotPublic、Inline、IntKey
  • 2、Hotfix代码注入优化,减少text段占用;
  • 3、Hotfix配置支持放Editor目录,可以减少text段占用;
  • 4、支持以指定类型传递object参数;
  • 5、反射调用Obsolete方法在Editor下打印warning;

变更

bug修复

  • 1、pinvoke独立设置的In,Out属性可能导致生成代码失败;
  • 2、如果业务在全局名字空间有和xLua名字空间的同名类,生成代码编译失败;

v2.1.7

17 May 02:30
Compare
Choose a tag to compare

安装说明

  • xlua_v2.1.7.zip是lua53版本(Unity)
  • xlua_v2.1.7_luajit.zip是luajit版本(Unity)
  • xlua_v2.1.7_general.zip是通用版本(非Unity)

新增特性

  • 1、支持发布UWP(含HoloLens,Xbox one,Win10 Mobile、Win10 PC)应用;
  • 2、支持对lua源代码ras+sha1签名;
  • 3、如果没安装Tools提示“please install the Tools”;
  • 4、linxu版本的支持;
  • 5、支持bitcode打包;
  • 6、对所有struct新增无参数构造函数;
  • 7、delegate的参数名改为p0到pn,防止hotfix时业务代码变量和生成代码冲突;
  • 8、支持对成员名为C#关键字的情况;
  • 9、新增util.loadpackage,和require类似,通过searcher加载文件,不同的是,它不执行,而且也不会cache到package.loaded;
  • 10、优化模版引擎大文件的生成性能;
  • 11、新增不需要生成代码的注入方式;
  • 12、支持构造函数参数带ref和out修饰符;
  • 13、构造函数也支持黑名单排除;

变更

  • 1、this[object field]操作符重载;
  • 2、反射的数据转换规则改成和生成代码一致;
  • 3、忽略掉匿名类及匿名函数的注入;

bug修复

  • 1、规避Unity的bug:List,CustomType是当前执行程序集的类型,这在.Net是不需要指明程序集就可以通过Type.GetType得到,但Unity下不行。
  • 2、解决反射下,可变参数不提供时,传null的问题;
  • 3、继承了另外一个程序集的类型,使用了protected类型会导致注入失败;
  • 4、luajit去掉dlopen和dlsym的调用;
  • 5、解决通用版本的生成代码工具找不到模版的问题;
  • 6、修复通用版本反射导入泛化类型的问题;
  • 7、反射调用含delegate参数的的api,会因为缓存而导致调用LuaEnv.Dispose失败;
  • 8、兼容老版本的C编译器,声明要放开头;
  • 9、生成代码对hotfix的检测算法和注入工具不一致导致的注入失败;
  • 10、注入的nested类型是public,但其的外层类型非public,生成代码报错;
  • 11、析构函数只判断名字可能出现误判;
  • 12、构造函数是非public的,可能会导致找不到适配delegate而注入失败;
  • 13、修正Extension method会在所有子类都生成代码的bug(2.1.6泛化特性引入);
  • 14、构造函数重载,只有一个能hotfix成功;
  • 15、规避一个可能是il2cpp的bug(unity5.4):字符串参数默认值是"",ios下在反射的default value也是Reflection.Missing;
  • 16、将一个table传到List<>,取了最后一个参数,而不是那个table的长度;
  • 17、ldarg指令在这种场景下il2cpp转换时会出现异常:1、采用模版注入;2、从4到255间有一个输出参数;改为兼容性更好的ldarg.s;
  • 18、解决配置了System.Delegate到CSCallLua,执行生成代码会编辑器会crash的问题;
  • 19、扩展函数可能和原来的函数同名,反射实现并未考虑到这种情况;
  • 20、通用版本的可变参数delegate调用异常;
  • 21、unity4规避lua53冲突的方式改为返回null更合适,异常方式会导致IsNull无法正常工作;
  • 22、lua_tostring解码失败改为UTF8解码;

v2.1.6

01 Mar 03:11
Compare
Choose a tag to compare

安装说明

  • xlua_v2.1.6.zip是lua53版本(Unity)
  • xlua_v2.1.6_luajit.zip是luajit版本(Unity)
  • xlua_v2.1.6_general.zip是通用版本(非Unity)

新增特性

  • 1、带约束的泛型支持(by forsakenyang);
  • 2、非Unity的.net环境支持;
  • 3、代码注入支持小工具方式,该方式不用拷贝cecil库,可以解决拷错cecil库版本或者和Unity,VS插件冲突的问题;
  • 4、Hotfix配置支持字段和属性
  • 5、更方便的Unity协程hotfix
  • 6、在hotfix触发事件;
  • 7、LuaTable添加ForEach方法以及Length属性;
  • 8、cmake生成项目优化:保留源文件目录结构;
  • 9、对已经Dispose的LuaEnv的访问做保护;Dispose时检查callback是否已经都释放,没释放的话报错;
  • 10、支持释放Hotfix回调;

变更

  • 1、构造函数改为执行原有逻辑后调用lua;
  • 2、this[string field]操作符重载会影响到继承调用,去掉该特性的支持;
  • 3、编辑器下的代码注入改为手动方式;

bug修复

  • 1、防止定义了同时定义get_xx方法以及xx属性的生成代码的重名。
  • 2、struct注入代码无效;
  • 3、Utils加名字空间,防止和业务冲突;
  • 4、返回定长多维数组的delegate,生成代码可能会冲突;
  • 5、interface,以及编辑器下不生成代码情况下,对可变参数的展开;
  • 6、il2cpp下,如果不生成代码,会报ManifestModule不支持;
  • 7、规避Unity4的bug:访问一个已经被Distroy的UnityEngine.Object,编辑器下会崩溃,这个问题在Unity5,或者luajit版本都不会出现;
  • 8、修改上个版本引入的问题:xlua_setglobal会漏一个值在栈上,这会导致一些32位应用不稳定;
  • 9、当delegate参数只有ref和out的区别的话,报重载冲突;

v2.1.5

13 Jan 09:57
Compare
Choose a tag to compare

安装说明

  • xlua_v2.1.5.zip是lua53版本
  • xlua_v2.1.5_luajit.zip是luajit版本

新增特性

  • 1、全平台热补丁;
  • 2、新增线程安全模式,可通过THREAD_SAFT宏打开;
  • 3、新增更简便的配置方式,具体参见XLua\Doc下《XLua的配置.doc》;
  • 4、多虚拟机实例时的自动Dispose;
  • 5、内存优化:减少匿名闭包到delegate映射的内存占用;减少LuaFunction以及LuaTable内存占用;减少lua table映射C#interface的gc;
  • 6、生成代码速度优化;
  • 7、支持直接在lua侧clone C#结构体;
  • 8、LuaFunction新增无gc调用api;

变更

  • 1、delegate必须都加[CSharpCallLua]才支持C#到lua的回调(以前参数和返回值都相同的delegate只要其中一个加了就可以);
  • 2、加回string/number到枚举的自动转换;

bug修复

  • 1、枚举不生成代码时,第一次使用会产生两个不同的userdata;
  • 2、数组和System.Type的相互引用导致System.Type生成代码无法加载;
  • 3、更安全的异常处理,封装lua_setglobal,lua_getglobal的异常,C#回调保证所有C#异常都catch并转换到成lua error。