如何在Nlua中使用C#静态字符串
我正在使用NLua作为应用程序的脚本接口。 我想将LUA语言的键盘输入发送到我的C代码 我用这个C代码 在LUA脚本中,我是这样做的如何在Nlua中使用C#静态字符串,c#,lua,nlua,C#,Lua,Nlua,我正在使用NLua作为应用程序的脚本接口。 我想将LUA语言的键盘输入发送到我的C代码 我用这个C代码 在LUA脚本中,我是这样做的 keypressC(Key.EnterC) keypressS(Key.EnterS) 在按键C中,Nlua将值57351传递给按键参数。没关系 在按键操作中,Nlua将值“”传递给按键参数。是柯。 我不知道为什么会有这个角色“?”。 看起来NLua中存在封送处理错误(即LuaInterface) 你能帮我吗?这是nLua/LuaInterface中的封送问题
keypressC(Key.EnterC)
keypressS(Key.EnterS)
在按键C中,Nlua将值57351传递给按键参数。没关系
在按键操作中,Nlua将值“”传递给按键参数。是柯。
我不知道为什么会有这个角色“?”。
看起来NLua中存在封送处理错误(即LuaInterface)
你能帮我吗?这是nLua/LuaInterface中的封送问题 它使用
Marshal.StringToHGlobalAnsi
将字符串从C#封送到Lua。它使用
Marshal.PtrToStringAnsi
将字符串从Lua封送到C#
如果您在这些函数中来回使用示例字符串,您可以看到它重现了您的问题:
string test = "\uE007";
Console.WriteLine(test);
Console.WriteLine("{0}: {1}", test[0], (int) test[0]);
IntPtr ptr = Marshal.StringToHGlobalAnsi(test);
string roundTripped = Marshal.PtrToStringAnsi(ptr, test.Length);
Console.WriteLine(roundTripped);
Console.WriteLine("{0}: {1}", roundTripped[0], (int) roundTripped[0]);
输出:
?
?: 57351
?
?: 63
如果您将封送处理函数更改为使用
Uni
而不是Ansi
,那么您的问题就会消失,但是您需要从源代码构建nLua/LuaInterface。由于nLua/LuaInterface中的封送问题,我测试了.net动态语言运行时的Lua。实际上,NeoLua使用.NET字符串,您可以使用所有功能,例如“test”:Trim()
我试过NeoLua,但它有太多的bug。例如,即使是撞车,我也没有问题。开启一场关于的讨论,NeoLithos反应迅速。在NLua中修复,将很快在NuGet中
?
?: 57351
?
?: 63