可惜没人提醒,后来才想明白,直接硬看 C# 这边的源码是不行的,想明白 C# 与 XLua 的交互原理,至少得先了解 C/C++ 与 Lua 的交互原理 ——毕竟 C# 与 XLua 交互,依然是基于中间的 C API,了解了那边的概念,再看 C# 与 XLua 交互原理,才好理解。 基本介绍 Lua 虚拟机由 C/C++ 实现,因此它可以直接与宿...
这里设置为Cdecl是因为lua_CFunction默认是Cdecl。设置了CallingConvention后这里定义的lua_CSFunction在native code中就和lua_CFunction一致了。 下面是生成代码的例子,我们来分析一下 [MonoPInvokeCallbackAttribute]用于标记作为非托管代码回调的方法。 ObjectTranslator与一个lua_State对应。 FastGetCSObj根据index获取cs对...
cscript configure.js iso8859x=yes iconv=no compiler=msvc cruntime=/MT debug=no prefix=c:\libxml2 这个配置的意思是激活libxml2库的ISO8859X支持、不依赖于iconv库;使用MSVC编译器(缺省值)、C运行库链接选项为/MT、编译成Release版本(缺省值)、编译出来的库、头文件和相关工具安装到c:\libxml2下。 链...
1usingSystem.Collections;2usingSystem.Collections.Generic;3usingUnityEngine;4usingXLua;56namespaceLGSTEST7{8publicclassLgs : MonoBehaviour9{10voidUpdate()11{12if(Input.GetMouseButtonDown(0))13{14Debug.Log(GetIndex(15,10));15}16}1718intGetIndex(intnum1,intnum2)19{20returnnum1 /num2;21}22}...
关于XLua与C#之间的通信分析wrap文件相当于一个接口lua先调用wrap文件然后wrap再调用c在wrap文件里面实际上是把c的类函数字段压入到lua虚拟机的虚拟栈上再由lua虚拟机出栈后给lua调用的 关于XLua与C#之间的通信分析 关于XLua与C#之间的通信分析 分析了一下XLua与C#之间的通信方式,发现和SLua,Ulua的区别不是很大...
“栈"相当于数据在Lua和C/C++之间的中转地。每种数据都有相应的存取接口。 而C#可以通过P/Invoke方式调用Lua的dll,通过这个dll执行Lua的C API。换言之C#可以借助C/C++来与Lua进行数据通信。在xLua的LuaDLL.cs文件中可以找到许多DllImport修饰的数据入栈与获取的接口。
public void CSharpFunc(MyStruct p){Debug.Log(p.x);Debug.Log(p.y);} myStructTable={a="C#",b="Lua"} obj:CSharpFunc(myStructTable) //Lua实现Awake Update OnDestroy luaStart=runTable.Get<Action>("Awake")//Start调用 void Start(){if(null!=luaStart){luaStart();}} ...
void Dispose() Dispose该LuaEnv LuaTable类 T Get(string key) 获取在key下,类型为T的value,如果不存在或者类型不匹配,返回null; T GetInPath(string path) 和Get的区别是,这个函数会识别path里头的“.”,比如var i = tbl.GetInPath<int>(“a.b.c”)相当于在lua里头执行i = tbl.a.b.c,避免仅为了...
[LuaCallCSharp] public class Foo { #region Supported methods public void Test1<T>(T a) where T : Foo1Parent { Debug.Log(string.Format("Test1<{0}>", typeof (T))); } public T1 Test2<T1, T2>(T1 a, T2 b, GameObject c) where T1 : Foo1Parent where T2 : Foo2Parent { Debug....
使用这种方法读取Table时需要生成代码,所以必须要给接口加上一个Attribute:[CSharpCallLua] [CSharpCallLua] interface ITable { int f1 { get; set; } int f2 { get; set; } int add(int num1, int num2); } ITable iTable = luaenv.Global.Get<ITable>("table"); ...