2010-09-15 24 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