jni访问java成员


访问非静态域(域=成员)
例如:现在要在C中访问一个java文件中的string变量key
public String key;


可以自定义jni在C上的接口java_类名_native名称
首先非静态获取jclass
jclass jclz = (*env)->GetObjectClass(env,jobj);

获取key属性的id
java jni中给每一个field定义的一个ID
三个参数:属性名称。属性签名。访问域


例如:
jfieldID fid = (*env)->GetFieldID(env,"key","Ljava/lang/String")
如果对象为static需要改成>GetStaticField



拿到key对应的值
GET***Field
jstring jstr = (*env)->GetObjectField(env,jobj,fid);





把jstr转换为C中的char *
char * c_str = (*env)->GetStringUTFChars(env,jstr.NULL)



生成新的字符串

再次转换回jstring
jstring new_str = (*env)->NewStringUTF(env,c_str);



放回java
(*env)->setObjectField(env,jobj,fildId,new_str);



释放申请的空间,char,和jstring
(*env)->ReleaseStringChars(env,new_str,c_str)



jint类型 = int,因此不需要像String那样转换C/C++可以识别的类型,可以直接对jint进行操作
例如
jint sum ;
sum = 10 ;

其它数据类型一样



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值