Как вызывать функции Lua из .NET - PullRequest
1 голос
/ 27 марта 2010

Я использую библиотеку LuaInterface для запуска lua в .net, и она отлично работает. Я мог получить доступ к CLR через Луа. Но как вызвать функцию Lua из C #?

Ответы [ 2 ]

2 голосов
/ 27 марта 2010

Вам нужно получить ссылку на LuaFunction, из которой вы можете использовать функцию Call ().

Пример кода можно найти на этом сайте .

Похоже, что за последние 3 года LuaInterface стал менее популярным и менее поддерживаемым.

В любом случае, вот новая ссылка на запись в блоге 9-го канала, в которой есть пример кода .

0 голосов
/ 29 мая 2018

Некоторые фотографии не соответствуют принятому ответу, поэтому я решил добавить новый ответ.

Это решение требует, чтобы вы сначала установили NLua NuGet в свой проект. Допустим, нам нужно получить некоторую таблицу или просто суммировать две переменные. Ваш файл Test.lua будет содержать:

-- Function sums up two variables
function SumUp(a, b)
    return a + b;
end

function GetTable()
    local table =
    {
        FirstName = "Howard",
        LastName = "Wolowitz",
        Degree = "just an Engineer :)",
        Age = 28
    };

    return table;
end;

Ваш код C # будет выглядеть так:

static void Main(string[] args)
    {
        try
        {
            Lua lua = new Lua();
            lua.DoFile(@"D:\Samples\Test.lua");

            // SumUp(a, b)
            var result = lua.DoString("return SumUp(1, 2)");
            Console.WriteLine("1 + 2 = " + result.First().ToString());

            // GetTable()           
            var objects = lua.DoString("return GetTable()"); // Array of objects
            foreach (LuaTable table in objects)
                foreach (KeyValuePair<object, object> i in table)
                    Console.WriteLine($"{i.Key.ToString()}: {i.Value.ToString()}");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
        Console.WriteLine("Press any key...");
        Console.ReadKey();
    }
...