调用tolua函数

tolua 自带例子介绍博客

lua 代码

    private string script =

        @"  function luaFunc(num)                        

                return num + 1

            end

            function luaprint()

                print('luaprint')

            end

            test = {}

            test.luaFunc = luaFunc

            test.luaprint = luaprint

        ";

首先定义一个lua 运行环境 

LuaState luastate = new LuaState();//只要lua想运行 就必须有这个

luastate.Start(); //启动

DelegateFactory.Init(); //再启动 委托工厂 (我还没理解这步)

lua.DoString(script); //执行lua 代码 

lua.Require() //或者用这样的方式执行

luaFunc = luaState.GetFunction("test.luaFunc"); //获取lua函数 test是一个lua表 luaFunc 是表里的一个函数 也可以直接写函数名 


如果函数 调用次数特别少  可以使用  luaState.Call(funcName) 或者luaState.Invoke(funname,123,true) call 和invoke的区别就是 有无返回值 (我只知道有这个区别)

普通使用可以用luafunc.ToDelegate> 或者 luafunc.ToDelegate> 注意func 和 action 的泛型 一个有返回值一个没有 对应你自己的函数

Func Func = luaFunc.ToDelegate>(); 然后调用func 就可以了 这里的函数是一个参数一个返回值 都是int

使用的最后 不需要使用的东西要销毁掉  不过如果todelegate 后也不能销毁luafunc 否则函数调用失败

luastate 要进行lua虚拟机栈的判空,具体对应的就是lua.CheckTop 

然后再 luastate.Dispose  luafunc.Dispose 不释放的话会造成内存泄漏

还有种方法是无GC 的操作 优点

int CallFunc()  

    {          

        func.BeginPCall();                  

        func.Push(123456);  

        func.PCall();          

int num = (int)func.CheckNumber();                      

        func.EndPCall();  

return (int)num;          

    }  

你可能感兴趣的:(调用tolua函数)