JNI如何调用Java函数

本文介绍了如何在JNI层通过函数名找到并调用Java层的函数,包括获取类引用、函数ID及确保对象不被垃圾回收的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候在jni层也需要调用Java层来完成一些功能,例如Java层有函数Media.JavaFunc(Media)。JNI如何才能根据函数名找到对Java函数的引用呢?

首先需要找到函数所属的类,可以通过jc=env->FindClass("Medir")找到。

其次根据上面的类的引用和函数名已经函数签名就可以找到函数,func=env->GetMethonID(jc,"JavaFunc","...")

最后调用env->CallVoidMethod(obj,func,obj)。obj表示Java对象在jni中的引用。

然而问题是如果obj(注意是在Java层创建的)已经被Java的垃圾回收机制回收了怎么办?可以通过调用env->NewGlobalRef(obj)来保证obj不会被回收,除非再调用env->DeleteGlobal(obj)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值