【XLua】018-Lua访问C#:函数参数的输入输出属性(out,ref)


参数的输入输出属性(out,ref)

  • 1、Lua脚本
local DrivenClass = CS.DrivenClass
local testobj = DrivenClass()

--复杂方法调用
local ret, p2, p3, csfunc = testobj:ComplexFunc({x=3, y = 'john'}, 100, function()
   print('i am lua callback')
end)
print('ComplexFunc ret:', ret, p2, p3, csfunc)
csfunc()

  • 2、C#脚本
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

[LuaCallCSharp]
public class BaseClass
{
    
}

public struct Param1//结构体参数
{
    public int x;
    public string y;
}

[LuaCallCSharp]
public class DrivenClass : BaseClass
{
    //复杂函数,参数的输入输出属性(out,ref)
    public double ComplexFunc(Param1 p1, ref int p2, out string p3, Action luafunc, out Action csfunc)
    {
        Debug.Log("P1 = {x=" + p1.x + ",y=" + p1.y + "},p2 = " + p2);
        luafunc();
        p2 = p2 * p1.x;
        p3 = "hello " + p1.y;
        csfunc = () =>
        {
            Debug.Log("csharp callback invoked!");
        };
        return 1.23;
    }
}


public class _005_LuaCallCSharp : MonoBehaviour
 {

    private LuaEnv env;
    
    void Start ()
    {
        env = new LuaEnv();
        env.DoString("require 'LuaCallCSharp'");
    }
    

    private void Update()
    {
        if(env!=null)
        {
            env.Tick();
        }
    }

    private void OnDestroy()
    {
        env.Dispose();
    }

}

运行结果:


img.jpg

注意:

1、Lua调用侧的参数处理规则:C#的普通参数算一个输入形参,ref修饰的算一个输入形参,out不算,然后从左往右对应lua 调用侧的实参列表;

2、Lua调用侧的返回值处理规则:C#函数的返回值(如果有的话)算一个返回值,out算一个返回值,ref算一个返回值,然后从左往右对应lua的多返回值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,919评论 0 38
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,554评论 0 17
  • 虽然计算机可以做很多事情,但它不会思考,它需要接受系统化的指令来工作。大部分用户通过应用程序为计算机指派任务,软件...
    JunChow520阅读 7,206评论 0 4
  • 走一段路 读两本书 遇两三个人 唱几首歌 吃几顿饭 说几句话 喝几杯酒 走几步路 哭笑几回 挣扎几次 仿佛就是一生
    红玫瑰和白汽球阅读 78评论 0 0
  • Analyze是静态检测内存泄漏工具,他只是发现可疑漏点。可以通过Product->Analyze菜单启动 检测出...
    彬至睢阳阅读 211评论 0 0