2010-09-15 28 views
2

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

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

编辑
今天早上我尝试了一些新的东西。我尝试使用LuaInterface.GetFunction(),并且一切正常,直到它在LuaDLL.cpp中遇到lua_pushstring()。此时,C#字符串将通过Marshal::StringToHGlobalAnsi().ToPointer()转换为char *。它看起来像这个函数期望一个空终止的字符串,我的字符串的第一个字节是0,所以我在我的lua代码中得到一个空字符串。

回答

3

最后将其追溯到lapi.c中的::lua_pushstring()的呼叫。它在传入的char *上调用strlen()。由于我的第一个数据字节是0,它返回0.有一个替代调用lua_pushlstring,它接受字符串的大小作为参数。更改为调用此函数可解决问题。

0

尝试使用System.Text.ASCIIEncoding.ASCII.GetString对您的字节数组进行编码以获取可传递给Lua的字符串。

+1

我最初试过这个,除了UTF8编码。问题在于将数据传递给Lua。我必须通过lua.DoString(“parse(_data_)”)来调用lua函数;字符串格式不喜欢空字符。 – kyork 2010-09-15 22:35:06