1、步骤 :

  (1)、获取 jclass

  (2)、获取 类属性字段的id(最后一个参数是 属性字段 的签名)

  (3)、获取/设置 类属性字段的值

  ZC: 貌似 JNI里面 操作 类属性字段,完全是 无视 访问权限的... 然而 static的类属性字段,稍有不同,要注意。

2、VC6(CPP)的DLL代码:

#include<stdio.h>
#include "jniZ_TjniField.h" JNIEXPORT void JNICALL Java_jniZ_TjniField_NativeFunc(JNIEnv * env, jobject obj)
{
// 获取obj中对象的class对象
jclass clazz = env->GetObjectClass(obj); // 获取 类属性字段的id(最后一个参数是 属性字段 的签名)
jfieldID fieldidFi = env->GetFieldID(clazz, "Fi", "I"); // public
jfieldID fieldidFj = env->GetFieldID(clazz, "Fj", "I"); // protected
jfieldID fieldidFk = env->GetFieldID(clazz, "Fk", "I"); // private
jfieldID fieldidFm = env->GetStaticFieldID(clazz, "Fm", "I"); // (非public/protected/private)的static // 获取 类属性字段的值
jint i = env->GetIntField(obj, fieldidFi);
jint j = env->GetIntField(obj, fieldidFj);
jint k = env->GetIntField(obj, fieldidFk);
jint m = env->GetStaticIntField(clazz, fieldidFm); printf("i : %d\n", i);
printf("j : %d\n", j);
printf("k : %d\n", k);
printf("m : %d\n", m); // 修改number的值为100,这里要注意的是jint对应C++是long型 ∴后面要加一个"L"
env->SetIntField(obj, fieldidFi, + i);
env->SetIntField(obj, fieldidFj, + j);
env->SetIntField(obj, fieldidFk, + k);
env->SetStaticIntField(clazz, fieldidFm, + m);
}

3、Java代码:

package jniZ;

import java.lang.reflect.Field;

public class TjniField
{
public int Fi = 0;
protected int Fj = 1;
private int Fk = 2;
static int Fm = 3; public native void NativeFunc(); public static void main(String[] args) throws Exception
{
//调用动态链接库
System.loadLibrary("JniField_VC6");
TjniField jniZ = new TjniField();
jniZ.NativeFunc(); // (1)、i
System.out.println("Java Fi : "+jniZ.Fi);
// (2)、j
Class<?> clazz = jniZ.getClass();
Field fieldJ = clazz.getDeclaredField("Fj");
fieldJ.setAccessible(true);
int j = fieldJ.getInt(jniZ);
System.out.println("Java Fj : "+j);
// (3)、k
Field fieldK = clazz.getDeclaredField("Fk");
fieldK.setAccessible(true);
int k = fieldK.getInt(jniZ);
System.out.println("Java Fk : "+k);
// (4)、m
System.out.println("Java Fm : "+Fm);
}
}

4、Java控制台输出:

Java Fi : 100
Java Fj : 101
Java Fk : 102
Java Fm : 103
i : 0
j : 1
k : 2
m : 3

5、

最新文章

  1. Android切换动画之ViewPager
  2. hdu 1196 Lowest Bit
  3. sql2008来远程访问sql2005数据库服务器
  4. maven学习系列教程,第一课(web项目的搭建)
  5. 题解西电OJ (Problem 1006 - 转盘游戏)--动态规划
  6. 如何在ios手机端的Safari浏览器 中“查看网页源代码”
  7. POJ 1035 Spell checker 简单字符串匹配
  8. UITableView学习总结
  9. PHP+Mysql————表单数据插入数据库及数据提取
  10. SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法
  11. Java综合题目
  12. 关于form表单上传图片的一些记录
  13. Python中协程的实现
  14. python之路--day6--字符编码
  15. VS2017 提示警告 IDE0006
  16. 实现在同一界面打开putty终端连接工具
  17. CString与UTF8互转代码
  18. [CQOI2016] 手机号码 (数位dp)
  19. OO 第三次博客总结
  20. 从FastDFS官网下载我们需要的安装包

热门文章

  1. ubuntu设置开机启动脚本
  2. Oracle数据库模型(OLAP/OLTP)
  3. php accumulation rockmongo
  4. Linux基础命令(二)
  5. jQuery实现图片预览
  6. 面试常见的selenium问题
  7. 海量数据存储之nosql教程(转)
  8. window下安装mysql详细步骤
  9. Java io流详解一
  10. knockout 学习使用笔记------绑定值时赋值失败