2015-01-15 3 views
4

Как передать таблицу Lua с C#Как передать таблицу Lua с C#

Я использую LuaInterface, это мой C# код

using System; 
    using System.IO; 
    using System.Text; 
    using LuaInterface; 

    namespace GetLuaTable 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 

       Lua netLua = new Lua(); 

       CShaprFunction cShapr = new CShaprFunction(); 
       netLua.RegisterFunction("CShaprConsoleLine", cShapr, cShapr.GetType().GetMethod("CShaprConsoleLine")); 
       netLua.RegisterFunction("CSharpGetTableFromStr", cShapr, cShapr.GetType().GetMethod("CSharpGetTableFromStr")); 
       netLua.DoFile("MyLua.lua"); 
       netLua.GetFunction("main").Call(); 
       Console.ReadKey(); 
      } 
     } 
     class CShaprFunction 
     { 
      public void CShaprConsoleLine(object obj) 
      { 
       Console.WriteLine(obj); 
      } 
      public LuaTable CSharpGetTableFromStr(string name) 
      { 
       Lua lua = new Lua(); 
       lua.DoString("a={\"test\"}"); 
       LuaTable tab = lua.GetTable(name); 
       return tab; 
      } 
     } 
    } 

это Lua код:

function main() 
    CShaprConsoleLine("Start") 
    local tmptable = CSharpGetTableFromStr("a") 
    CShaprConsoleLine(type(tmptable)) 
    CShaprConsoleLine("end") 
    end 

Но я получаю результат, тип tmptable - тип функции, а не тип таблицы. например:

Start 
function 
end 

так как я могу передать таблицу lua?

ответ

2

Для этого необходимо использовать тот же объект Lua как в программе, так и в CShaprFunction, потому что он создает таблицу Lua в среде Lua, и вы не можете напрямую переместить таблицу Lua в другую среду.

Вот пример, который производит:

Start 
table 
end 

я использовал NLua, преемника LuaInterface, что до сих пор обновляется, потому что у меня была проблема с LuaInterface, но он должен работать так же в LuaInterface.

using System; 
using System.IO; 
using System.Text; 
using NLua; 

namespace GetLuaTable 
{ 
    class Program 
    { 
     public static Lua netLua; 

     static void Main(string[] args) 
     { 

      netLua = new Lua(); 

      CShaprFunction cShapr = new CShaprFunction(); 
      netLua.RegisterFunction("CShaprConsoleLine", cShapr, cShapr.GetType().GetMethod("CShaprConsoleLine")); 
      netLua.RegisterFunction("CSharpGetTableFromStr", cShapr, cShapr.GetType().GetMethod("CSharpGetTableFromStr")); 
      netLua.DoString(@" 
      function main() 
       CShaprConsoleLine(""Start"") 
       local tmptable = CSharpGetTableFromStr(""a"") 
       CShaprConsoleLine(type(tmptable)) 
       CShaprConsoleLine(""end"") 
       end 
      "); 
      netLua.GetFunction("main").Call(); 
      Console.ReadKey(); 
     } 
    } 
    class CShaprFunction 
    { 
     public void CShaprConsoleLine(object obj) 
     { 
      Console.WriteLine(obj); 
     } 
     public LuaTable CSharpGetTableFromStr(string name) 
     { 
      var lua = Program.netLua; 
      lua.DoString("a={\"test\"}"); 
      LuaTable tab = lua.GetTable(name); 
      return tab; 
     } 
    } 
} 
+0

Большое спасибо, что правильно – Xinbs

+0

Можете ли вы помочь мне с этим вопросом: https://stackoverflow.com/questions/48400700/how-to-use-json-methods-inside-lua-script и-выполнить-Lua-скрипт-с-с – User

Смежные вопросы