跳到主要内容

Marshal 规范(spec/marshal/

规范性: C# ↔ Lua 值在栈上的形态与转换规则。 实现:../../impl/marshal/

本目录

文件内容
01-OVERVIEW.md默认 Marshal 矩阵、integer/number、数组摘要、引用门面摘要
02-MARSHAL-AS.md[LuaMarshalAs]LuaMarshalType、合法集合、Table/Unpacked/Params/Bytes/UserData/Opaque、XML 外部配置
03-BYREF.mdref / in / out(C#→Lua Opaque;Lua→C#:Opaque/ByVal 直传地址,其余临时槽)
04-OPAQUE.mdOpaqueValue、get_opaquevalue / set_opaquevalue、生命周期、回传分流
05-STRUCT.mdstruct ByVal / ByObj / Handle、box/unbox
06-CLASS.mdclass / interface / 声明类型门面
07-ARRAY.mdszarray / mdarray / Bytes
08-ENUM.md默认 integer + zlua.box
09-FUNCTION.mdDelegate ↔ Lua function
10-POINTER.mdT*、函数指针、不支持类型

阅读顺序

  1. 01-OVERVIEW.md — 默认行为总表
  2. 02-MARSHAL-AS.md — 何时覆盖默认、如何配置 Table/Unpacked/Params
  3. 按类型深入: 05-STRUCT / 06-CLASS / 07-ARRAY / 08-ENUM / 09-FUNCTION
  4. 双向 byref 分叉: Lua→C# → 03-BYREF.md;C#→Lua → 04-OPAQUE.md

交叉引用

主题其它 spec
CSharp 类型表、构造入口../02-TYPE-SYSTEM.md
重载与实参匹配../04-METHOD-OVERLOAD.md
zlua.box / unbox / cast / get_opaquevalue / set_opaquevalue../05-LIB.md
元表与成员索引(非 Marshal)../metatable/

平台原则

  • Mono(Editor)与 Il2Cpp(Player)的 Lua 可见 Marshal 语义一致;差异仅在 impl/ 层。
  • 无 Event 专用支持;使用 add_* / remove_* 普通方法(见 ../../README.md)。