jni回调java_java – 使用Interface在JNI中实现回调函数

这里的复杂情况是,您想要调用本机C代码,而这些代码又要调用java方法.这实际上有点棘手.

你需要创建一个JNI C函数来调用java和一个C函数进行匹配

MyCPPFunction回调签名.后者将作为一个包装器来调用java方法.

因为包装器将需要有关JNI环境的信息,这些信息不能由参数提供(以免破坏签名),您可以创建一些全局变量来保存它:

jobject g_getSizeIface;

jmethodID g_method;

JNIEnv *g_env;

java将调用的C函数如下:

JNIEXPORT void JNICALL Java_ClassName_MyCPPFunction

(JNIEnv *env, jint size, jobject getSizeInterface)

{

jclass objclass = env->GetObjectClass(getSizeInterface);

jmethodID method = env->GetMethodID(objclass, "GetSize", "(m_SizeClass)I");

if(methodID == 0){

cout << "could not get method id!\n";

return;

}

g_method = method;

g_getSizeIface = getSizeInterface;

g_env = env

MyCPPFunction(size, WrapperFunc);

}

因此包装功能是:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值