LuaJava: 一步一步调试LuaJava

本文介绍如何逐步调试LuaJava源代码,探讨LuaJava如何利用JNI技术实现Java与Lua的交互。通过创建LuaState虚拟机,注册关键类,并使用LuaObject代理Lua对象进行操作,展示了LuaJava的简单易懂的实现方式。
摘要由CSDN通过智能技术生成

 

 

 

 通过调试LuaJava源文件来学习和了解LuaJava. LuaJava 作为Java的脚本工具,核心代码通过luajava.c文件来实现,luajava是通过jni 技术实现的. 一步一步调试LuaJava源代码同时有助于学习JNI技术.

 

1  -hello.a  lua文件  内容:global_a ="global_a_string"

 Lua源文件,文件中仅仅包含一个Lua全局变量,该全局变量为字符串类型.global_a ="global_a_string"

2-TestLuaJava java文件

	   //加载Lua 虚拟机
	    LuaState L = LuaStateFactory.newLuaState();
	   //加载Lua 自身类库
	    L.openLibs();
	    //加载hello.lua 模块
	    L.LdoFile("hello.lua");
	    //获取 global_a 全局变量
	    LuaObject global_a = L.getLuaObject("global_a");
	    if(global_a.isString()){
	    	System.out.println("global_a:"+global_a);
	    } L.close();  //最后要关闭Lua VM 来释放资源

3- 一步一步调试LuaJava源代码


 通过stateid来创建LuaState虚拟机, _open() 函数为JNI c语言实现的函数,用来获取c语言中虚拟机指针. private CPtr luaState; luaState私有成员是在Java中对C指针的一个抽象.

 在LuaState类中,_open()函数原型如下:

 private synchronized native CPtr _open();

 

在luajava.c中 代码如上,对应c和java语言交换的API 不熟悉,暂时放置在这里.

在创建LuaState时,注册java中的几个关键类来供Lua来使用.

/**************************** JNI FUNCTIONS ****************************/

/************************************************************************
*   JNI Called function
*      LuaJava API Function
************************************************************************/

JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState_luajava_1open
  ( JNIEnv * env , jobject jobj , jobject cptr , jint stateId )
{
  lua_State* L;

  jclass tempClass;
  /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值