Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Nlua中使用C#静态字符串_C#_Lua_Nlua - Fatal编程技术网

如何在Nlua中使用C#静态字符串

如何在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中的封送问题

我正在使用NLua作为应用程序的脚本接口。 我想将LUA语言的键盘输入发送到我的C代码

我用这个C代码

在LUA脚本中,我是这样做的

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