xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.

Overview

license release PRs Welcome Build status

(English Documents Available)

C#下Lua编程支持

xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

xLua的突破

xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

  • 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;
  • 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;
  • 编辑器下无需生成代码,开发更轻量;

更详细的特性、平台支持介绍请看这里

安装

打开zip包,你会看到一个Assets目录,这目录就对应Unity工程的Assets目录,保持这目录结构放到你的Unity工程。

如果希望安装到其它目录,请看FAQ相关介绍。

文档

快速入门

一个完整的例子仅需3行代码:

安装好xLua,建一个MonoBehaviour拖到场景,在Start加入如下代码:

XLua.LuaEnv luaenv = new XLua.LuaEnv();
luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
luaenv.Dispose();

1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。

2、一个LuaEnv实例对应Lua虚拟机,出于开销的考虑,建议全局唯一。

C#主动调用lua也很简单,比如要调用lua的系统函数,推荐方式是:

  • 声明
[XLua.CSharpCallLua]
public delegate double LuaMax(double a, double b);
  • 绑定
var max = luaenv.Global.GetInPath<LuaMax>("math.max");
  • 调用
Debug.Log("max:" + max(32, 12));

建议绑定一次,重复使用。生成了代码的话,调用max是不产生gc alloc的。

热补丁

  • 侵入性小,老项目原有代码不做任何调整就可使用。
  • 运行时影响小,不打补丁基本和原有程序一样。
  • 出问题了可以用Lua来打补丁,这时才会走到lua代码逻辑;

这里是使用指南。

更多示例

技术支持

一群:612705778

二群:703073338

入群的问题:有问题该先从哪找答案

回答:FAQ

平时也要谨记这答案,90%以上问题都可以在FAQ里头找到答案。这些问题就别在群刷屏了。

Comments
  • 直接在 cs 里调用 luaL_error 真的没问题么?

    直接在 cs 里调用 luaL_error 真的没问题么?

    https://github.com/Tencent/xLua/blob/master/Assets/XLua/Src/StaticLuaCallbacks.cs#L98 类似这种。

    这相当于绕过了 mono ,直接 unwind 了 stack frame 。

    而 mono 自己 raise exception 需要 unwind stack frame 的时候,可是做了许多额外工作的。

    opened by cloudwu 94
  • Hotfix Generate Code issue

    Hotfix Generate Code issue

    AssemblyResolutionException: Failed to resolve assembly: 'UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' Mono.Cecil.BaseAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name, Mono.Cecil.ReaderParameters parameters) Mono.Cecil.BaseAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name) Mono.Cecil.DefaultAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name) ... ... Mono.Cecil.ModuleWriter.WriteModuleTo (Mono.Cecil.ModuleDefinition module, System.IO.Stream stream, Mono.Cecil.WriterParameters parameters) Mono.Cecil.ModuleDefinition.Write (System.IO.Stream stream, Mono.Cecil.WriterParameters parameters) Mono.Cecil.ModuleDefinition.Write (System.String fileName, Mono.Cecil.WriterParameters parameters) Mono.Cecil.AssemblyDefinition.Write (System.String fileName, Mono.Cecil.WriterParameters parameters) Mono.Cecil.AssemblyDefinition.Write (System.String fileName) XLua.Hotfix.HotfixInject () (at Assets/XLua/Src/Editor/Hotfix.cs:263)

    点击 生成GenerateCode报错,参考https://groups.google.com/forum/#!topic/mono-cecil/2YrccvV3dpY 加了AddSearchDirectory还是一样的错误

    opened by mydishes 63
  • unity5.5.3 ios运行时闪退

    unity5.5.3 ios运行时闪退

    #0 0x00000001018dba90 in il2cpp::icalls::mscorlib::System::Object::GetType(Il2CppObject*) at /Users/builduser/buildslave/unity/build/Tools/il2cpp/il2cpp/libil2cpp/icalls/mscorlib/System/Object.cpp:24 #1 0x00000001007281f8 in ::OverloadMethodWrap_Init_m1302647323(OverloadMethodWrap_t1422847581 *, ObjectCheckers_t3937197 *, ObjectCasters_t3695619658 *, const MethodInfo *) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_34.cpp:359819 #2 0x0000000100726ec4 in ::MethodWrapsCache__GenMethodWrap_m4289822449(MethodWrapsCache_t4056581618 *, Type_t *, String_t *, Il2CppObject *, const MethodInfo *) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_34.cpp:338589 #3 0x000000010074aeec in ::Utils_makeReflectionWrap_m2424205106(Il2CppObject *, IntPtr_t, Type_t *, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, lua_CSFunction_t10472361 **, lua_CSFunction_t10472361 **, bool, const MethodInfo *) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_35.cpp:11055 #4 0x000000010074bfe0 in ::Utils_ReflectionWrap_m4083470672(Il2CppObject *, IntPtr_t, Type_t *, const MethodInfo *) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_35.cpp:11709 #5 0x000000010072f9dc in ::ObjectTranslator_TryDelayWrapLoader_m786891116(ObjectTranslator_t2220652049 *, IntPtr_t, Type_t *, const MethodInfo ) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_34.cpp:344757 #6 0x0000000100742324 in ::StaticLuaCallbacks_ImportType_m3914329362(Il2CppObject , IntPtr_t, const MethodInfo ) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_35.cpp:4473 #7 0x0000000100742548 in ::ReversePInvokeWrapper_StaticLuaCallbacks_ImportType_m3914329362(intptr_t) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_35.cpp:4554 #8 0x0000000101af0324 in csharp_function_wrap () #9 0x0000000101accbfc in luaD_precall () #10 0x0000000101ae7a50 in luaV_execute () #11 0x0000000101acd054 in luaD_call () #12 0x0000000101ae2b5c in luaT_callTM () #13 0x0000000101ae7a28 in luaV_execute () #14 0x0000000101acd0e0 in luaD_callnoyield () #15 0x0000000101acc458 in luaD_rawrunprotected () #16 0x0000000101acd69c in luaD_pcall () #17 0x0000000101ac293c in lua_pcallk () #18 0x0000000100629c9c in Lua_lua_pcall_m2257336719 [inlined] at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_34.cpp:332561 #19 0x0000000100629c88 in ::DelegateBridge___Gen_Delegate_Imp26_m1260279622(DelegateBridge_t3830961628 , Il2CppObject , const MethodInfo ) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_34.cpp:127381 #20 0x000000010022e0c0 in ::U3CCreateTcpClientU3Ec__AnonStorey8_U3CU3Em__0_m3122276119(U3CCreateTcpClientU3Ec__AnonStorey8_t1524651749 , const MethodInfo ) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_14.cpp:30135 #21 0x000000010081d768 in ::EDTcpClientManager_FixedUpdate_m1269088710(EDTcpClientManager_t3720283190 , const MethodInfo ) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Bulk_Assembly-CSharp_8.cpp:7803 #22 0x0000000100fa73e0 in RuntimeInvoker_Void_t1841601450(MethodInfo const, void, void) at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/Native/Il2CppInvokerTable.cpp:861 #23 0x0000000101913cf0 in il2cpp::vm::Runtime::Invoke(MethodInfo const, void, void, Il2CppException) () #24 0x000000010137a3cc in ::Invoke() at /Users/builduser/buildslave/unity/build/Runtime/Scripting/Backend/ScriptingInvocation.cpp:288 #25 0x000000010145a88c in Invoke [inlined] at /Users/builduser/buildslave/unity/build/Runtime/Scripting/Backend/ScriptingInvocation.h:80 #26 0x000000010145a878 in CallMethodIfAvailable [inlined] at /Users/builduser/buildslave/unity/build/Runtime/Mono/MonoBehaviour.cpp:462 #27 0x000000010145a838 in ::CallUpdateMethod() at /Users/builduser/buildslave/unity/build/Runtime/Mono/MonoBehaviour.cpp:560 #28 0x0000000101179dfc in UpdateBehaviour [inlined] at /Users/builduser/buildslave/unity/build/Runtime/GameCode/Behaviour.cpp:191 #29 0x0000000101179df0 in ::CommonUpdate() at /Users/builduser/buildslave/unity/build/Runtime/GameCode/Behaviour.cpp:153 #30 0x0000000101288704 in ::PlayerLoop() at /Users/builduser/buildslave/unity/build/Runtime/Misc/PlayerLoop.cpp:154 #31 0x00000001014b8570 in ::UnityPlayerLoopImpl() at /Users/builduser/buildslave/unity/build/PlatformDependent/iPhonePlayer/LibEntryPoint.mm:218 #32 0x00000001000c5210 in ::UnityRepaint() at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/UnityAppController+Rendering.mm:266 #33 0x00000001000c50fc in ::-UnityAppController(Rendering) repaintDisplayLink at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/UnityAppController+Rendering.mm:79 #34 0x0000000105a504fc in __clang_call_terminate () #35 0x00000001945da600 in CA::Display::DisplayLinkItem::dispatch(unsigned long long) () #36 0x00000001945da4b0 in CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) () #37 0x0000000191637dd4 in IODispatchCalloutFromCFMessage () #38 0x0000000191361958 in __CFMachPortPerform () #39 0x0000000191379adc in CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION () #40 0x000000019137927c in __CFRunLoopDoSource1 () #41 0x0000000191376d90 in __CFRunLoopRun () #42 0x00000001912a6d94 in CFRunLoopRunSpecific () #43 0x0000000192d10074 in GSEventRunModal () #44 0x000000019755f130 in UIApplicationMain () #45 0x00000001000bef1c in main at /Users/weimei/Desktop/WMHD/P02_Tags/Product/xxios/Classes/main.mm:32 #46 0x00000001902b559c in start ()

    opened by lfs1023 31
  • 关于Hotfix属性标签

    关于Hotfix属性标签

    在实际项目接入过程中,对于我们这个已经上线的项目来讲,为了引进热更代码功能,需要在所有所需的类打上标签,数量太多了。。虽然可以写Editor脚本处理,但是我选择了直接改Hotfix中筛选类的代码,放弃了判断Hotfix标签,而采用了判断类的命名空间的做法(我们项目中的业务代码都有命名空间),并修复了一些随之而来的小问题。 建议的话,在判断是否要Hotfix的时候,在原有判断Hotfix的基础上,加一个命名空间白名单的功能,指定命名空间下的类都处理掉。

    opened by cjsworld 29
  • 08_Hotfix这个例子为什么我运行点击按钮是报错的?

    08_Hotfix这个例子为什么我运行点击按钮是报错的?

    运行 if (GUI.Button(new Rect(10, 100, 300, 150), "Hotfix")) { luaenv.DoString(@" local tick = 0 xlua.hotfix(CS.HotfixTest, 'Update', function() --tick = tick + 1 --if (tick % 50) == 0 then print('<<<<<<<<Update in lua, tick = ' .. tick) --end end) "); }

    是报错的 是我设置不对么

    opened by ZhuOliver 25
  • 添加第三方库失败

    添加第三方库失败

    • 先来个小问题,编译成功,但是最后拷贝的时候失败
    === BUILD AGGREGATE TARGET ALL_BUILD OF PROJECT XLua WITH CONFIGURATION Release ===
    
    Check dependencies
    
    Write auxiliary files
    write-file /Users/Leo/Documents/C_Code/Leo/xLua/build/build_osx/XLua.build/Release/ALL_BUILD.build/Script-9529A65AE888411F93CFF299.sh
    chmod 0755 /Users/Leo/Documents/C_Code/Leo/xLua/build/build_osx/XLua.build/Release/ALL_BUILD.build/Script-9529A65AE888411F93CFF299.sh
    
    PhaseScriptExecution CMake\ Rules build_osx/XLua.build/Release/ALL_BUILD.build/Script-9529A65AE888411F93CFF299.sh
        cd /Users/Leo/Documents/C_Code/Leo/xLua/build
        /bin/sh -c /Users/Leo/Documents/C_Code/Leo/xLua/build/build_osx/XLua.build/Release/ALL_BUILD.build/Script-9529A65AE888411F93CFF299.sh
    echo ""
    
    echo Build\ all\ projects
    Build all projects
    
    ** BUILD SUCCEEDED **
    
    cp: plugin_lua53/Plugins/xlua.bundle/Contents/MacOS/xlua: No such file or directory
    
    • 上面问题,我最后手动拷贝xlua.bundle到Plugins中,下面是我按照doc里面添加一个第三方库

    CMakeLists.txt修改如下

    ##省略。。。。
    
    
    project(XLua)
    
    option ( UINT_ESPECIALLY "using custom ulong" OFF )
    option ( USING_LUAJIT "using luajit" OFF )
    
    find_path(XLUA_PROJECT_DIR NAMES SConstruct
        PATHS 
        ${CMAKE_SOURCE_DIR}
        NO_DEFAULT_PATH
        )
    
    MARK_AS_ADVANCED(XLUA_PROJECT_DIR)
    
    #begin lua-rapidjson
    set (RAPIDJSON_SRC 
        lua-rapidjson/src/rapidjson.cpp
    )
    set_property(
    	SOURCE ${RAPIDJSON_SRC}
    	APPEND
    	PROPERTY COMPILE_DEFINITIONS
    	LUA_LIB
    )
    list(APPEND THIRDPART_INC  lua-rapidjson/rapidjson/include)
    set (THIRDPART_SRC ${THIRDPART_SRC} ${RAPIDJSON_SRC})
    #end lua-rapidjson
    
    #begin pbc
    set (PBC_SRC 
        pbc/src/alloc.c
        pbc/src/array.c
        pbc/src/array.c
        pbc/src/bootstrap.c
        pbc/src/context.c
        pbc/src/decode.c
        pbc/src/map.c
        pbc/src/pattern.c
        pbc/src/proto.c
        pbc/src/register.c
        pbc/src/rmessage.c
        pbc/src/stringpool.c
        pbc/src/varint.c
        pbc/src/wmessage.c
        pbc/binding/lua53/pbc-lua53.c
    )
    set_property(
    	SOURCE ${PBC_SRC}
    	APPEND
    	PROPERTY COMPILE_DEFINITIONS
    	LUA_LIB
    )
    list(APPEND THIRDPART_INC pbc pbc/src)
    set (THIRDPART_SRC ${THIRDPART_SRC} ${PBC_SRC})
    #end pbc
    
    
    ##省略。。。。
    
    

    生成后再xcode中已经看到luaopen_rapidjson生成

    我测试的工程就是xlua的 01_Helloworld

    自己添加了一个LuaDLL如下:

    
    namespace XLua.LuaDLL
    {
    	using System;
    	using System.Runtime.InteropServices;
    	using System.Text;
    	using XLua;
    
    	public partial class Lua
    	{
    		[DllImport (LUADLL, CallingConvention = CallingConvention.Cdecl)]
    		public static extern int luaopen_rapidjson (System.IntPtr L);
    
    		[DllImport (LUADLL, CallingConvention = CallingConvention.Cdecl)]
    		public static extern int luaopen_protobuf_c (System.IntPtr L);
    
    
    		[MonoPInvokeCallback (typeof(LuaDLL.lua_CSFunction))]
    		public static int LoadRapidJson (System.IntPtr L)
    		{
    			return luaopen_rapidjson (L);
    		}
    	}
    }
    

    修改HelloWorld.cs如下:

    /*
     * Tencent is pleased to support the open source community by making xLua available.
     * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.
     * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
     * http://opensource.org/licenses/MIT
     * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
    */
    
    using UnityEngine;
    using XLua;
    
    public class Helloworld : MonoBehaviour
    {
    	// Use this for initialization
    	void Start ()
    	{
    		LuaEnv luaenv = new LuaEnv ();
    //		luaenv.AddBuildin ("socket1", StaticLuaCallbacks.LoadSocketCore);
    		luaenv.AddBuildin ("rapidjson", XLua.LuaDLL.Lua.LoadRapidJson);
    //		luaenv.AddBuildin ("protobuf.c", XLua.LuaDLL.Lua.LoadPbc);
    //		luaenv.DoString ("CS.UnityEngine.Debug.Log('hello world')");
    //		luaenv.DoString ("local c = require \"protobuf.c\"");
    		luaenv.DoString ("local rapidjson = require('rapidjson')");
    //		luaenv.DoString ("local test = require('socket') print(test)");
    //		luaenv.DoString ("local rapidjson = require('rapidjson') local t = rapidjson.decode('{\"a\":123}') print(t.a) t.a = 456 local s = rapidjson.encode(t) print('json', s)\n");
    //		luaenv.Dispose ();
    	}
    	
    	// Update is called once per frame
    	void Update ()
    	{
    	
    	}
    }
    

    最后报错:

    EntryPointNotFoundException: luaopen_rapidjson
    XLua.LuaDLL.Lua.LoadRapidJson (IntPtr L) (at Assets/_LFramework/Script/XLua/LuaDLL.cs:21)
    (wrapper native-to-managed) XLua.LuaDLL.Lua:LoadRapidJson (intptr)
    XLua.LuaEnv.DoString (System.String chunk, System.String chunkName, XLua.LuaTable env) (at Assets/XLua/Src/LuaEnv.cs:206)
    Helloworld.Start () (at Assets/XLua/Examples/01_Helloworld/Helloworld.cs:23)
    
    
    opened by wulei 24
  • Unable to open Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll: Check external application preferences.

    Unable to open Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll: Check external application preferences.

    注入相关问题: 生成注入都提示成功了,但是部分预制体上挂的脚本会丢失(还没注入前是OK的),比如GraphicRaycaster 这个脚本,必丢失。但是脚本位置并没有显示miss,显示的是正确脚本位置,脚本下提示为:the associated script can not be load。。。。这个通用提示;点击脚本console里提示为Unable to open E:/Unity5.6.3/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll: Check external application preferences.

    我监听了注入时候加入AddSearchDirectory中的路径,引用的有上面那个路径,但是没有Library\UnityAssemblies这个路径,然后我改成手动添加(Library\UnityAssemblies)路径进去,但是错误内容并没有变化

    求帮助、、、、、、、

    opened by shwz 19
  • 关于编译第三方库

    关于编译第三方库

    问几个比较基础的问题,还望指教:

    1.xlua是只支持加载一个,且只有xlua.dll库吧?

    2.如果可以直接加载第三方dll,那假设我现在有个LUAReader.dll库,那么我可以这么写吧? namespace LuaDLL { public partial class Lua { [DllImport("LUAReader.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int luaopen_LUAReader(System.IntPtr L);

        [MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))]
        public static int LoadLUAReader(System.IntPtr L)
        {
            return luaopen_LUAReader(L);
        }
    

    } } 然后调用AddBuildin: luaenv.AddBuildin("LUAReader", LuaDLL.Lua.LoadLUAReader);

    3.可以在lua里面直接调用dll库吗? 比如:

    LUAReader = require "LUAReader" LUAReader.DoSomething()

    非常感谢!!!

    opened by LazyPlanet 19
  • 请教,如果在lua中引用了C#对象,有没有什么通用的方法可以一劳永逸地清理这块引用,最终c#和lua端都GC干净呢

    请教,如果在lua中引用了C#对象,有没有什么通用的方法可以一劳永逸地清理这块引用,最终c#和lua端都GC干净呢

    1.在a.lua中 引用了c#的对象,self.csharp_obj = obj 2.在c#中,也通过Alua_Interface.cs,在调用a.lua ==> 'Alua_Interface callLua;' 3.这时候如果只执行了c#中的 callLua?.Dispose(),那么csharp_obj将还存在于ObjectTranlator的reverseMap和objects中。 4.在c#或者lua端有没有什么通用的接口或处理方式,可以解决这块内存的泄露呢。(因为a.lua 作为基类,内部对c#对象的引用内容实在太多了T T,实在不太想一个个去self.csharp_obj = nil 处理)

    opened by Laughing111 17
  • 多线程使用 crash 问题

    多线程使用 crash 问题

    在 Linux dotnet core 平台下,会crash。

    using System;
    using System.Threading;
    using System.Threading.Tasks;
    using XLua;
    
    namespace BugReproduce
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("begin");
                long cnt = 1000;
                long finishCnt = 0;
                for(long i=0; i< cnt; i++)
                {
                    Task.Run(async () =>
                    {
                        var env = new XLua.LuaEnv();
                        await Task.Delay(200);
                        System.Threading.Interlocked.Increment(ref finishCnt);
                    });
                }
    
                while (Interlocked.Read(ref finishCnt) < cnt)
                {
                    Task.Delay(10).Wait();
                    GC.GetTotalMemory(true);
                }
            }
        }
    }
    
    opened by patricksuo 16
  • Hotfix注入Assembly失败

    Hotfix注入Assembly失败

    • 在实例工程里跑通了我们的更新框架,打算接入到开发工程中去。拷贝了xLua文件夹以及ExampleGenConfig.cs到Assets目录下,设置好Symbol并GenCode。菊花转完发现在HotfixInject()里执行到L224 assembly.Write(INTERCEPT_ASSEMBLY_PATH)时抛出异常AssymblyResolutionException: Failed to resolve assembly: 'UnityEngine ...。在文件系统中可以看到Library/ScriptAssemblies/Assembly-CSharp.dll文件大小为0,写入失败了。

    • 现在考虑问题可能出现在两方面,一个可能是我们工程的程序集过大(将近8M)导致的,另一个可能是工程里的哪些脚本引用导致的。希望能确认下是否存在第一种的可能性,另外对于第二个猜想希望能得到一些指点。

    • 首先我把hotfix里其他代码都注释掉只保留了assembly.Read和Write,问题依然存在。

    • 然后我从网上下载了Mono.cecil库,稍微修改了下,在MetadataResolver.Resolve里抓取了异常再抛出得到了下面的信息ResolutionException: Failed to resolve UnityEngine.WrapMode. 随后我在我们的工程和示例工程里均加入了输出assembly中FullName包含‘WrapMode’的type名称,并且在示例工程里添加了一些WrapMode的代码,但运行结果却是示例工程没有任何输出,而我们的工程里含有一个叫eWrapMode的type。 目前暂时没了思路,不知道你们应用在大型工程上时有没有遇到这种问题,我们的Untiy版本是5.3.4p1

    opened by Sparrowfc 16
  • xlua在调用Lua脚本委托的时候显示没有实例

    xlua在调用Lua脚本委托的时候显示没有实例

    在examples的luacallcsharp的脚本里案例是给了一个string参数的委托,我尝试自己写了一个string和一个int作为参数的委托:

    //=========== in C# =========== [CSharpCallLua] public delegate void TestDelegate1(string param, int num); public TestDelegate1 testNewDelegate; public void csDelegate1(string param, int num) { Debug.Log("TestDelegate in c#:" + param + " , " + num); } --===========in lua =========== --Delegate testobj.testNewDelegate = testobj.csDelegate1 testobj.testNewDelegate('hello',0)

    报错 LuaException: c# exception:c# exception:System.NullReferenceException: Object reference not set to an instance of an object

    暂时不知道问题出在哪里,希望大佬能够解惑一二

    opened by kyln7 1
  • Example

    Example "12_ReImplementInLua" fails with "invalid c# struct!" (again?)

    Running the example from https://github.com/Tencent/xLua/tree/master/Assets/XLua/Examples/12_ReImplementInLua fails with the following error:

    LuaException: [string "chunk"]:37: invalid c# struct!
    stack traceback:
    	[C]: in field '?'
    	[string "chunk"]:37: in metamethod '__newindex'
    	[string "chunk"]:4: in function 'test_vector3'
    	[string "chunk"]:47: in main chunk
    XLua.LuaEnv.ThrowExceptionFromError (System.Int32 oldTop) (at Assets/XLua/Src/LuaEnv.cs:441)
    XLua.LuaEnv.DoString (System.Byte[] chunk, System.String chunkName, XLua.LuaTable env) (at Assets/XLua/Src/LuaEnv.cs:274)
    XLua.LuaEnv.DoString (System.String chunk, System.String chunkName, XLua.LuaTable env) (at Assets/XLua/Src/LuaEnv.cs:288)
    TestXLua.Start () (at Assets/Scripts/TestXLua.cs:34)
    

    The problematic code is fields_setters[k](o, v), but I've tried adding just print(o) before that, and it fails with the same error. It looks like working with o itself causes this trouble. The only function that worked with o was print(type(o)) which printed userdata.

    I saw that recently there was a fix for a similar symptom, #951, but it looks like that this time the problem is different. I'm using the xLua-2.1.16_with_silicon_support version.

    opened by noncom 0
  • Generator 对于 System.Reflection 中的匿名委托生成了错误代码

    Generator 对于 System.Reflection 中的匿名委托生成了错误代码

    问题出现版本:Tag:v2.1.16 操作:将 ExampleConfig 中的注释全部打开,然后点击生成代码按钮,错误如下。

    public <>f__AnonymousType1<System.Type, System.Reflection.MethodInfo> __Gen_Delegate_Imp52(System.Type p0, System.Reflection.MethodInfo p1)
    {
    #if THREAD_SAFE || HOTFIX_ENABLE
                lock (luaEnv.luaEnvLock)
                {
    #endif
                    RealStatePtr L = luaEnv.rawL;
                    int errFunc = LuaAPI.pcall_prepare(L, errorFuncRef, luaReference);
                    ObjectTranslator translator = luaEnv.translator;
                    translator.Push(L, p0);
                    translator.Push(L, p1);
                    
                    PCall(L, 2, 1, errFunc);
                    
                    
                    <>f__AnonymousType1<System.Type, System.Reflection.MethodInfo> __gen_ret = (<>f__AnonymousType1<System.Type, System.Reflection.MethodInfo>)translator.GetObject(L, errFunc + 1, typeof(<>f__AnonymousType1<System.Type, System.Reflection.MethodInfo>));
                    LuaAPI.lua_settop(L, errFunc - 1);
                    return  __gen_ret;
    #if THREAD_SAFE || HOTFIX_ENABLE
                }
    #endif
    }
    
    opened by jezzychao 1
  • 解决了,Unity的Library删掉重新生成再导出可以了。有点坑。。。。。顺便说下,ldump.c lundump.c lundump.h这几个我直接写死了DLUAC_COMPATIBLE_FORMAT对应的内容。应该没啥问题吧。

    解决了,Unity的Library删掉重新生成再导出可以了。有点坑。。。。。顺便说下,ldump.c lundump.c lundump.h这几个我直接写死了DLUAC_COMPATIBLE_FORMAT对应的内容。应该没啥问题吧。

    解决了,Unity的Library删掉重新生成再导出可以了。有点坑。。。。。顺便说下,ldump.c lundump.c lundump.h这几个我直接写死了DLUAC_COMPATIBLE_FORMAT对应的内容。应该没啥问题吧。

    Originally posted by @pl01898759 in https://github.com/Tencent/xLua/issues/987#issuecomment-1126148304

    ldump.c lundump.c lundump.h直接写死DLUAC_COMPATIBLE_FORMAT 怎么做的能提供 能提供下方式吗

    opened by k0204 0
Releases(v2.1.16_with_silicon_support)
  • v2.1.16_android_release_lib(Sep 9, 2021)

  • v2.1.15f1(Jun 24, 2020)

    unity2019的一些兼容性问题解决以及自xlua v2.1.14版本以来累积的bug修复

    新增特性 1、生成代码过滤器 2、优化反射查找delegate匹配bridge的性能 3、unity 2019.2以上版本手机版本注入不了的问题

    变更

    bug修复 1、反射查找同名delegate桥接在不生成代码的时候表现不一致 2、嵌套struct标注为PackAsTable时生成代码报错 3、反射wrap代码加入栈空间检查 4、如果枚举定义了很多个值(几千个),会触发unity在android下的一个bug:函数体很大而且有很多分支,执行该函数会crash 5、chunkname和脚本文件名不一致的问题 6、最小生成模式枚举生成代码报错 7、当采用反射方式注册枚举值时,如果一个枚举有多个相同的值,比如A,B都是1,那么在lua里头访问B将会为空 8、sbyte[]在.net 4下push到lua变成字符串的问题 9、泛型导致生成代码失败的问题 10、非Assembly-CSharp程序集注入时,out参数处理有误 11、内嵌类通过xlua.private_accessible设置私有访问可能失败的问题 12、cecil插入指令后,并未自动更新offset,某种情况下会导致计算偏移量错误

    注意:别下source包,下带v2.1.15的zip包

    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.15.zip(5.01 MB)
    xlua_v2.1.15_general.zip(4.48 MB)
    xlua_v2.1.15_luajit.zip(5.14 MB)
  • v2.1.14(Feb 27, 2019)

    新增特性

    • 1、新增nintento switch的支持
    • 2、unity 2018兼容
    • 3、android arm64支持
    • 4、原生库的visual studio 2017编译支持
    • 5、增加“XLua/Generate Minimize Code”菜单
    • 6、防止有的工程有非法的dll导致生成代码中断
    • 7、更高效的lua_pushstring(需要通过NATIVE_LUA_PUSHSTRING开启)

    变更

    • 1、window库默认编译器改为visual studio 2017

    bug修复

    • 1、修正枚举类型如果只加GCOptimize不加LuaCallCSharp会crash的问题
    • 2、示例配置加入对Edtitor类的过滤
    • 3、UWP兼容修复
    • 4、接口继承引入的同签名方法实现
    • 5、未生成代码,extension方法行为不一致
    • 6、修复Nullable类型参数,如果最后一个参数是nil,会导致其他参数全是nil的问题
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.14.zip(5.01 MB)
    xlua_v2.1.14_general.zip(4.48 MB)
    xlua_v2.1.14_luajit.zip(5.14 MB)
  • v2.1.13(Dec 5, 2018)

    新增特性

    • 1、新增AdaptByDelegate注入模式;
    • 2、新增xlua.get_generic_method,用于调用泛型函数;
    • 3、支持类似CS.System.Collections.Generic.List(CS.System.Int32)的泛型写法;
    • 4、注入新选项:忽略编译器自动生成代码,以及不生成base代理;
    • 5、针对lua编程以及热补丁,均添加直接可用的自动化配置样例;
    • 6、新增luajit的gc64支持;
    • 7、加入兼容字节码(一份字节码支持32位和64位系统)的支持;
    • 8、内置新lua内存泄漏检测工具;
    • 9、delegate桥接动态实例化:delegate是4个参数以内,参数均引用类型,无返回值或者返回引用类型,不用配置CSharpCallLua也能调用lua函数;
    • 10、提供util.print_func_ref_by_csharp函数,用于查看当前被C#引用的lua函数;
    • 11、支持无CS全局变量的工作方式;

    变更

    • 1、虚拟机升级:lua5.3.4 -> lua5.3.5,luajit2.1b2 -> luajit2.1b3;
    • 2、delegate bridge代码段占用优化;
    • 3、改为PostProcessBuild事件检查是否生成代码;
    • 4、适配xcode 10:osx平台不再支持32bit版本构建;
    • 5、名字空间、类名拼写错误时,对静态成员的设置会报错;
    • 6、防止CS全局table被删除导致xlua工作异常;
    • 7、Windows下构建lib,若使用vs 2015参数执行cmake失败,则继续尝试使用vs 2017;
    • 8、编辑器下不生成代码时,也检查Blacklist,维持和运行时一致;

    bug修复

    • 1、泛型的数组生成代码报错;
    • 2、防止对TypeExtensions配置了LuaCallCSharp后,lua里头IsValueType之类的判断永真;
    • 3、生成代码过滤掉含指针的函数和字段;
    • 4、适应索引器属性名不是Item的情况;
    • 5、解决attribute初始化异常会导致生成代码,注入终止的问题;
    • 6、精简模式下空Enum生成代码错误;
    • 7、通过把初始化函数分割成小函数,规避unity在android下执行大函数crash的bug;
    • 8、Assignable处理obj为null情况;
    • 9、内嵌类不Obsolete,但外层类Obsolete的生成代码报错
    • 10、解决inline注入方式下,如果lua逻辑跑异常,看不到异常信息的问题;
    • 11、修复xlua.private_accessible访问后,同名public的方法无法访问的Bug;
    • 12、[Out]修饰的参数不应该生成out关键字;
    • 13、通过反射查找合适的适配器时,有可能访问到非适配器函数;
    • 14、精简模式导出代码无get_Item、set_Item;
    • 15、IntKey方式下不自动xlua.private_accessible的问题;
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.13.zip(4.65 MB)
    xlua_v2.1.13_general.zip(4.00 MB)
    xlua_v2.1.13_luajit.zip(4.77 MB)
  • v2.1.12(Jul 9, 2018)

    新增特性

    • 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、交错数组+多维数组的复合,生成代码报错的问题
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.12.zip(4.65 MB)
    xlua_v2.1.12_example.zip(105.76 KB)
    xlua_v2.1.12_general.zip(3.99 MB)
    xlua_v2.1.12_luajit.zip(4.75 MB)
    xlua_v2.1.12_tutorial.zip(35.24 KB)
  • v2.1.11p2(Apr 13, 2018)

  • v2.1.11p1(Mar 20, 2018)

    新增特性

    • 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时,不应该生成代码
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.11.zip(4.61 MB)
    xlua_v2.1.11_general.zip(4.29 MB)
    xlua_v2.1.11_luajit.zip(4.71 MB)
  • v2.1.10p1(Sep 25, 2017)

  • v2.1.10(Sep 18, 2017)

    新增特性

    • 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兼容问题;
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.10.zip(4.24 MB)
    xlua_v2.1.10_c_src.zip(2.07 MB)
    xlua_v2.1.10_example.zip(100.30 KB)
    xlua_v2.1.10_general.zip(4.30 MB)
    xlua_v2.1.10_luajit.zip(4.34 MB)
    xlua_v2.1.10_tutorial.zip(35.91 KB)
  • v2.1.9(Aug 10, 2017)

    安装说明

    • 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,枚举生成代码报错;
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.9.zip(4.48 MB)
    xlua_v2.1.9_example.zip(100.24 KB)
    xlua_v2.1.9_general.zip(4.27 MB)
    xlua_v2.1.9_luajit.zip(4.59 MB)
  • v2.1.8(Jun 27, 2017)

    安装说明

    • 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名字空间的同名类,生成代码编译失败;
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.8.zip(4.44 MB)
    xlua_v2.1.8_general.zip(1.01 MB)
    xlua_v2.1.8_luajit.zip(4.56 MB)
  • v2.1.7(May 17, 2017)

    安装说明

    • 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解码;
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.7.zip(4.43 MB)
    xlua_v2.1.7_general.zip(1.20 MB)
    xlua_v2.1.7_luajit.zip(4.53 MB)
  • v2.1.6(Mar 1, 2017)

    安装说明

    • 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的区别的话,报重载冲突;
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.6.zip(3.01 MB)
    xlua_v2.1.6_example.zip(80.70 KB)
    xlua_v2.1.6_general.zip(1.18 MB)
    xlua_v2.1.6_luajit.zip(3.76 MB)
    xlua_v2.1.6_tutorial.zip(35.91 KB)
  • v2.1.5(Jan 13, 2017)

    安装说明

    • 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。
    Source code(tar.gz)
    Source code(zip)
    xlua_v2.1.5.zip(2.68 MB)
    xlua_v2.1.5_luajit.zip(3.43 MB)
  • v2.1.5p(Jan 3, 2017)

Owner
Tencent
Tencent
A hotfix library for Android platform, and not just this...

中文版 wiki (deprecated) changelog Amigo Service Platform (Amigo backend service is no longer supported) Amigo is a hotfix library which can fix everythi

eleme 1.4k Nov 25, 2022
AndFix is a library that offer hot-fix for Android App.

AndFix AndFix is a solution to fix the bugs online instead of redistributing Android App. It is distributed as Android Library. Andfix is an acronym f

Alibaba 6.9k Dec 29, 2022
Nuwa, pure java implementation, can hotfix your android application.

Nuwa Nuwa is a goddess in ancient Chinese mythology best known for repairing the pillar of heaven. With this Nuwa project,you can also have the repair

Jason Ross 3k Dec 17, 2022
dexposed enable 'god' mode for single android application.

What is it? Dexposed is a powerful yet non-invasive runtime AOP (Aspect-oriented Programming) framework for Android app development, based on the work

Alibaba 4.5k Dec 28, 2022
Small app to create icon sets for Linux, Windows, OSX, Android and IOS from a single PNG image

FXIconcreator Small app to create icon sets (multi resolution) for Linux, Windows, OSX from a single PNG image Reason for creating such an app was tha

null 18 Aug 4, 2022
Unity-Android-SDK-Plugins - Android SDK/Library/Plugins (aar) for Unity Developers

Unity Android SDK Plugins Unity Android SDK Plugins is an Open Source project th

NNK 1 Aug 14, 2022
A multi-platform Collins Dictionary client, supports for Desktop(Windows/Linux/MacOS) and Android.

Collins Dictionary This is a multi-platform Collins Dictionary client, supports for Desktop(Windows/Linux/MacOS) and Android. For Linux and MacOS, ple

KonYaco 57 Dec 30, 2022
A cross-platform Java game Engine (Framework) , support JavaFX / Android / IOS / HTML5 / Linux / MAC / Windows

Loon Game Engine (Java Game Framework) EN / KR Free Game Resources Links Download Loon Game Engine Only Android-studio Template : androidstudio-templa

cping 502 Jan 4, 2023
An easy to use graphical chia plot manager & optimizer for windows, mac & linux. You're a farmer, Harry!

Harry Plotter You're a farmer, Harry! Harry Plotter is an easy to use magical Chia plot manager for muggles! It works on Windows, MacOS, and Linux. It

Andrew Bueide 132 Oct 26, 2022
A rewrite of the popular project GitUp that works in Linux, Mac, and Windows.

GitDown This is a rewrite from the ground up of the popular GitUp library available on Mac. It is built using Kotlin and Compose Desktop from Jetbrain

Cody Mikol 20 Dec 16, 2022
This provides the javafx runtimes for windows, linux, and mac os x86 platforms for Ignition

ignition JavaFX Provider This provides the javafx runtimes for windows, linux, and mac os x86 platforms for Ignition Steps to use run gradlew build st

Jonathan Coffman 2 Oct 17, 2022
A Android Web IDE supports code auto-completion and highlight, plugin (Supports Html, Css, JS, Json, Php etc)

WebDevOps A Android Web IDE supports code auto-completion and highlight, plugin (Supports Html, Css, JS, Json, Php etc) Join us QQ group number: 10314

SuMuCheng 22 Jan 3, 2023
Godot's AdMob Plugin for Android (3.2.2+) using GitHub Actions for CI/CD. Working on Standard and Mono Godot versions.

Godot AdMob Android A Godot's plugin for Android of AdMob. About • Installation • Docs • Downloads About This repository is for a Godot Engine Plugin

Poing Studios 148 Jan 8, 2023
(almost) Mono theme for IntelliJ

AlmostMonoTheme Template ToDo list Create a new IntelliJ Platform Plugin Template project. Get familiar with the template documentation. Verify the pl

Abhilash Meesala 1 Jan 27, 2022
Convert lua to make it human-readable and remove obfuscation.

Muna Convert lua to make it human-readable and remove obfuscation. Based on luaj parser and lua formatter. Before function L1_1(A0_2, A1_2) local L2

Akka 45 Dec 28, 2022
LuaBox Helper for call lua scripts on Kotlin

LuaBox Helper for call lua scripts on Kotlin! Big thanks to Luaj library! 1. Create a class for working with LuaBox: class ScriptCore: LuaBox( pat

Мяучер 8 Nov 12, 2022
Linux GUI for Kuri's userspace tablet drivers. Supports non-wacom (XP-Pen, Huion, Gaomon) graphics tablets and pen displays

Kuri's Userspace tablet driver utility (GUI) This is a new GUI implementation for the userland driver I've written here: https://github.com/kurikaesu/

Aren Villanueva 12 Jan 4, 2023
A tool translate a apk file to stantard android project include so hook api and il2cpp c++ scaffolding when apk is a unity il2cpp game. Write code on a apk file elegantly.

FakerAndroid (FakerAndroid.jar or FakerAndroid-AS) A tool translate a apk file to stantard android project include so hook api and il2cpp c++ scaffold

null 231 Dec 29, 2022