LuaJava: 一步一步调试LuaJava

 

 

 

 通过调试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源代码


LuaJava: 一步一步调试LuaJava_第1张图片

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

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

 private synchronized native CPtr _open();

 

LuaJava: 一步一步调试LuaJava_第2张图片

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

LuaJava: 一步一步调试LuaJava_第3张图片

在创建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;
  /

你可能感兴趣的:(LuaJava,LuaJava,Lua,Java,JNI)