栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Android NDK上使用JNI在C和Java之间传递复杂的结构

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Android NDK上使用JNI在C和Java之间传递复杂的结构

您不能将原始C结构传递给Java,并希望它将这些结构视为类。您需要为您的结构创建一个类。我看到您已经做到了,所以您唯一要做的就是将这个结构转换为该类的实例。

Java方面的代码:

public static native ComplexClass listenUDP();

将转换为:

JNIEXPORT jobject JNICALL Java_com_main_MainActivity_listenUDP(JNIEnv *env, jclass);

在该C代码中,您需要使用

env->FindClass();
函数加载ComplexClass
。然后,要创建该类的新实例(如果您使用零参数的构造函数,它将简化操作),您需要加载构造函数方法签名并将其“调用”在
env->NewObject()
方法中。完整代码:

jclass complexClass = env->FindClass("/com/main/ComplexClass");jmethod constructor = env->GetMethodId(complexClass, "<init>", "()com/main/ComplexClass"); //The name of constructor method is "<init>"jobject instance = env->NewObject(complexClass, constructor);

然后,您需要使用设置此类的字段

env->setXXXField();
。如果您有更多对象作为字段并且还想创建它们,则对另一个对象重复上述过程。

这看起来很复杂,但这就是在托管Java代码中使用本机C的代价。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号