Передача байтового массива C # в LuaInterface - PullRequest
2 голосов
/ 16 сентября 2010

В моем коде C # есть байтовый массив, который мне нужно передать в экземпляр LuaInterface.Я могу использовать pack () в Lua, передать полученную строку в C # и преобразовать ее в System.Text.Encoding.UTF8.GetBytes(), но другой путь, похоже, не работает.

Есть ли простое решение?Я надеюсь, что смогу избежать присвоения байтового массива глобальному значению.

Редактировать :
Сегодня утром я попробовал несколько новых вещей.Я попытался использовать LuaInterface.GetFunction(), и все работает, пока не достигнет lua_pushstring() в LuaDLL.cpp.В этот момент строка C # преобразуется в символ * через Marshal::StringToHGlobalAnsi().ToPointer().Похоже, эта функция ожидает строку с нулевым символом в конце, и первый байт моей строки равен 0, поэтому я получаю пустую строку в своем коде lua.

Ответы [ 2 ]

3 голосов
/ 16 сентября 2010

Наконец проследил это до звонка на ::lua_pushstring() в lapi.c.Он вызвал strlen() на переданном символе *. Поскольку мой первый байт данных был 0, он вернул 0. Существует альтернативный вызов lua_pushlstring, который принимает размер строки в качестве аргумента.Изменение вызова этой функции решило проблему.

0 голосов
/ 16 сентября 2010

Попробуйте кодировать ваш байтовый массив с помощью System.Text.ASCIIEncoding.ASCII.GetString , чтобы получить строку, которую можно передать Lua.

...