62,614
社区成员
发帖
与我相关
我的任务
分享
package jniZ;
public class JNIjw03
{
public int number = 0;//定义一个属性
//定义一个本地方法
public native void SayHello();
public static void main(String[] args)
{
//调用动态链接库
System.loadLibrary("JNIjwVC6_03");
JNIjw03 jni03 = new JNIjw03();
jni03.SayHello();
System.out.println("In Java number : "+jni03.number);
}
}
#include<stdio.h>
#include "jniZ_JNIjw03.h"
JNIEXPORT void JNICALL Java_jniZ_JNIjw03_SayHello (JNIEnv * env, jobject obj)
{
printf("Java_jniZ_JNIjw03_SayHello - 1\n");
// 获取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);
// 输出到控制台
printf("In C++ number : %d\n", number);
// 修改number的值为100,这里要注意的是jint对应C++是long型 ∴后面要加一个"L"
env->SetIntField(obj, id_number, 100L);
printf("Java_jniZ_JNIjw03_SayHello - 2\n");
}
In Java number : 100
Java_jniZ_JNIjw03_SayHello - 1
In C++ number : 0
Java_jniZ_JNIjw03_SayHello - 2