c# - 将 C# 字节数组传递给 LuaInterface

标签 c# lua luainterface

我的 C# 代码中有一个字节数组,需要将其传递到 LuaInterface 实例中。我可以在 Lua 中使用 pack(),将生成的字符串传递给 C# 并使用 System.Text.Encoding.UTF8.GetBytes() 进行转换,但采用其他方式似乎不起作用。

有简单的解决办法吗?我希望我可以避免将字节数组分配给全局值。

编辑:
今天早上我尝试了一些新事物。我尝试使用 LuaInterface.GetFunction(),一切正常,直到它到达 LuaDLL.cpp 中的 lua_pushstring()。此时,C# 字符串通过 Marshal::StringToHGlobalAnsi().ToPointer() 转换为 char*。看起来这个函数需要一个以 null 结尾的字符串,而我的字符串的第一个字节是 0,所以我在 lua 代码中得到一个空字符串。

最佳答案

最终追踪到lapi.c中对::lua_pushstring()的调用。它对传入的 char* 调用了 strlen()。由于我的数据的第一个字节是 0,因此它返回 0。还有一个备用调用 lua_pushlstring,它接受作为参数的字符串的大小。更改为调用此函数解决了该问题。

关于c# - 将 C# 字节数组传递给 LuaInterface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3722060/

相关文章:

c# - 如何创建没有 GUI 的 C# 程序?

lua - 尝试打印 _G 不起作用

lua - 检查redis中的多个键

c# - LuaInterface - 如何限制对 .Net 类的访问?

c# - 以编程方式将项目添加到菜单条?

c# - 将动态表格或 div 内容作为电子邮件正文内容发送

c - 这是使用 Torch 从 LuaJit 解析 'Not enough memory' 的实用方法吗

c# - LuaInterface C# : dostring vs dofile. 是否值得将一个将被多次调用的脚本加载到内存中?

.net - 在继续响应用户输入和渲染帧之前等待 x 秒

c# - 如何使用属性参数调用方法