请教如何用.lua调用.java包内的方法和变量

请教如何用.lua调用.java包内的方法和变量,第1张

1lua加入到环境变量中。即cmd可以识别lua命令

(右键计算机-》高级系统设置 在高级面板 -》环境变量 在系统变量或者用户变量中找到path(没有就新建path) path 中加入lua的路径即可,如:D:\Developments\Lua\51(原来有path时,在原来的path值后加分号,再加路径,如:原来的值;D:\Developments\Lua\51))

2写一个lua的脚本,放在任意路径下。比如在桌面下有文件 hellolua文件内容为

print('Hello World!')

3进入cmd(win+R 输入cmd回车) 切到桌面

cd C:\Documents\Desktop\

运行脚本即可:lua hellolua

输出结果为:Hello World!

要是你只想调用一个程序的话,我觉得可以把你那个程序编译以后,用osexecute ([command])这个函数执行。

This function is equivalent to the C function system It passes command to be executed by an operating system shell It returns a status code, which is system-dependent If command is absent, then it returns nonzero if a shell is available and zero otherwise

比如你那个程序编译以后叫“aexe”且和lua程序在同一目录,然后你在lua里直接些osexecute("//aexe")就好了。

目前的示例程序是使用 FFI 库来实现的 从 Lua 调用 C# 函数。 FFI 因为用到了反射机制来调用C# 函数,性能会比较低。 应该尽量避免使用,如果没有找到更好的办法,准备之后把这个FFI实现废弃掉。 其实直接用 C# 实现一个库的形式,来让 lua 调用这种传统的做法效率会比较高,也是推荐采用的方式。而且也并不会麻烦太多。

比如我现在要实现一个叫 libfoo 的库, 里面提供两个方法: add(a, b) 和 sub(a, b)

库的实现

using UniLua;

public static class LibFoo

{

    public const string LIB_NAME = "libfoocs"; // 库的名称, 可以是任意字符串

    

    public static int OpenLib(ILuaState lua) // 库的初始化函数

    {

        var define = new NameFuncPair[]

        {

            new NameFuncPair("add", Add),

            new NameFuncPair("sub", Sub),

        };

        

        luaL_NewLib(define);

        return 1;

    }

    

    public static int Add(ILuaState lua)

    {

        var a = luaL_CheckNumber( 1 ); // 第一个参数

        var b = luaL_CheckNumber( 2 ); // 第二个参数

        var c = a + b; // 执行加法 *** 作

        luaPushNumber( c ); // 将返回值入栈

        return 1; // 有一个返回值

    }

    

    public static int Sub(ILuaState lua)

    {

        var a = luaL_CheckNumber( 1 ); // 第一个参数

        var b = luaL_CheckNumber( 2 ); // 第二个参数

        var c = a - b; // 执行减法 *** 作

        luaPushNumber( c ); // 将返回值入栈

        return 1; // 有一个返回值

    }

}

库的初始化

// 创建 Lua 虚拟机

var Lua = LuaAPINewState();

// 加载基本库

LuaL_OpenLibs();

LuaL_RequireF( LibFooLIB_NAME  // 库的名字

              , LibFooOpenLib   // 库的初始化函数

              , false            // 不默认放到全局命名空间 (在需要的地方用require获取)

              );

库的使用 (在 lua 代码中)

// 获取库

local libfoo = require "libfoocs"

// 调用库的方法

print(libfooadd(42, 1))

print(libfoosub(42, 22))

以上就是关于请教如何用.lua调用.java包内的方法和变量全部的内容,包括:请教如何用.lua调用.java包内的方法和变量、怎么用lua 调用一个简单的 c程序、ulua中lua怎么调用c#的函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9539448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存