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.md | ref / in / out(C#→Lua Opaque;Lua→C#:Opaque/ByVal 直传地址,其余临时槽) |
| 04-OPAQUE.md | OpaqueValue、get_opaquevalue / set_opaquevalue、生命周期、回传分流 |
| 05-STRUCT.md | struct ByVal / ByObj / Handle、box/unbox |
| 06-CLASS.md | class / interface / 声明类型门面 |
| 07-ARRAY.md | szarray / mdarray / Bytes |
| 08-ENUM.md | 默认 integer + zlua.box |
| 09-FUNCTION.md | Delegate ↔ Lua function |
| 10-POINTER.md | T*、函数指针、不支持类型 |
阅读顺序
- 01-OVERVIEW.md — 默认行为总表
- 02-MARSHAL-AS.md — 何时覆盖默认、如何配置 Table/Unpacked/Params
- 按类型深入: 05-STRUCT / 06-CLASS / 07-ARRAY / 08-ENUM / 09-FUNCTION
- 双向 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)。