上一篇说道JNIEnv中的方法的用法,这一篇我们就来通过例子来看一下这些方法的使用:
首先是第一个例子:在Java代码中定义一个属性,然后再C++代码中将其设置成另外的值,并且输出来
先来看一下Java代码:
package com.jni.demo;public class JNIDemo {
public int number = 0;//定义一个属性//定义一个本地方法public native void sayHello();public static void main(String[] args){
//调用动态链接库System.loadLibrary("JNIDemo");JNIDemo jniDemo = new JNIDemo();jniDemo.sayHello();System.out.print(jniDemo.number);}}
在来看一下C++代码:
#include<iostream.h>#include "com_jni_demo_JNIDemo.h"JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv * env, jobject obj){
//获取obj中对象的class对象jclass clazz = env->GetObjectClass(obj);//获取Java中的number字段的id(最后一个参数是number的签名)jfieldID id_number = env->GetFieldID(clazz,"number","I");//获取number的值jint number = env->GetIntField(obj,id_number);//输出到控制台cout<<number<<endl;//修改number的值为100,这里要注意的是jint对应C++是long类型,所以后面要加一个Lenv->SetIntField(obj,id_number,100L);}