xlua - 使用clion给xlua增加lua-rapidjson库

1, 把头文件放在lua-rapidjson/include下,源码文件放在lua-rapidjson/source下,然后再CMakeList.txt中添加下图所示的内容

 

2, 加载CMakeList.txt可能会遇到下面的错误

原因是:需要使用vs作为编译器,而不是gnu的编译器

把Visual Studio移到第1个,设为默认(这边针对64位架构,所以选的是针对64位的编译工具)

 

3, 然后Build项目就行了

 

4, 新生成的xlua.dll替换Unity中的(如果Unity已打开,需要重启下,才能加载新的dll)

 

5, 测试是否成功

新建MyLua.cs,用于放dll加载代码

using System.Runtime.InteropServices;

namespace XLua.LuaDLL
{

    public partial class Lua
    {
        [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
        public static extern int luaopen_rapidjson(System.IntPtr L);

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

    }

}

新建lua脚本,Lua/Test8.lua.txt

local rapidjson = require('rapidjson')
local t = rapidjson.decode('{"a":123}')
print(t.a)

t.a = 456
local s = rapidjson.encode(t)
print('json', s)

新建测试脚本Test8.cs

using System.Text;
using UnityEditor;
using UnityEngine;
using XLua;

public class Test8 : MonoBehaviour
{
    private LuaEnv m_LuaEnv;

    void Start()
    {
        m_LuaEnv = new LuaEnv();
        m_LuaEnv.AddLoader((ref string filePath) =>
        {
            filePath = filePath.Replace('.', '/');
            filePath = $"Assets/{filePath}.lua.txt";
            var txtAsset = AssetDatabase.LoadAssetAtPath<TextAsset>(filePath);
            return Encoding.UTF8.GetBytes(txtAsset.text);
        });

        m_LuaEnv.AddBuildin("rapidjson", XLua.LuaDLL.Lua.LoadRapidJson);
        m_LuaEnv.DoString("require('Lua.Test8')");
    }

    void OnDestroy()
    {
        if (null != m_LuaEnv)
            m_LuaEnv.Dispose();
    }

}

 

6, 运行结果

 

posted @ 2024-02-26 23:13  yanghui01  阅读(108)  评论(0编辑  收藏  举报