JNI返回自定义结构体数组到Java
来源:互联网 发布:淘宝在哪里领取优惠卷 编辑:程序博客网 时间:2024/05/01 10:30
网上的文章大部分参差不齐,有的这样写有的那样写,多多少少有 bug,然后就自己探索了一下,基本下面这种写法应该算比较标准的,有任何问题可以评论交流下。
Java层
public class myInfo { public String fileType; public long fileSize; public int result; public long eConsumeTime; public long dConsumeTime; @Override public String toString() { return ; }}
Native层
头文件
//成员变量与Java层一一对应typedef struct cppInfo{ char *fileType; long fileSize; int result; long eConsumeTime; long dConsumeTime;}mycppInfo;
cpp文件
jobjectArray getLogInfo(JNIEnv *env, jobject thiz){ //初始化数组 jobjectArray logInfo = NULL; jsize logInfoLen = 1234; //获取Java中的对应的实例类 jclass jniInfo = (env)->FindClass("com/example/myInfo"); //初始化返回数组 logInfo = (env)->NewObjectArray(logInfoLen, jniInfo, NULL); //获取类构造函数 jmethodID objectClassInitID = (env)->GetMethodID(jniInfo, "<init>", "()V"); jobject objectNewEng; //获取类中每一个变量的定义 jfieldID fileType = (env)->GetFieldID(jniInfo, "fileType", "Ljava/lang/String;"); jfieldID fileSize = (env)->GetFieldID(jniInfo, "fileSize", "J"); jfieldID Result = (env)->GetFieldID(jniInfo, "result", "I"); jfieldID eConsumeTime = (env)->GetFieldID(jniInfo, "eConsumeTime", "J"); jfieldID dConsumeTime = (env)->GetFieldID(jniInfo,"dConsumeTime", "J"); //给每一个实例的变量赋值,添加到数组中 for(int i = 0; i < logInfoLen; i++) { //初始化类 objectNewEng = (env)->NewObject(jniInfo, objectClassInitID); //赋值操作 (env)->SetObjectField(objectNewEng,fileType,(env)->NewStringUTF(mycppInfo[i].fileType)); (env)->SetLongField(objectNewEng, fileSize, mycppInfo[i].fileSize); (env)->SetIntField(objectNewEng, Result, mycppInfo[i].result); (env)->SetLongField(objectNewEng, eConsumeTime, mycppInfo[i].eConsumeTime); (env)->SetLongField(objectNewEng, dConsumeTime, mycppInfo[i].dConsumeTime); //添加到objcet数组中 (env)->SetObjectArrayElement(logInfo, i, objectNewEng); } return logInfo;}
阅读全文
0 0
- JNI返回自定义结构体数组到Java
- jni返回结构体数组
- Jni返回结构体数组
- 5.4jni返回结构数组
- JNI 返回结构体参数
- JNI 返回结构体参数
- JNI 返回结构体参数
- JNI 返回结构体参数
- JNI 返回结构体参数
- Android------- jni返回结构体
- JNI 返回结构体参数
- JNI 返回结构体参数
- 用JNI从C传递结构体到JAVA
- 用JNI从C传递结构体到JAVA
- 用JNI从C传递结构体到JAVA
- JNI 返回结构体参数(1)
- JNI 返回结构体参数【转】
- android开发--- jni返回结构体
- hibernate 只进 ResultSet 不支持请求的操作
- myeclipse里重要的快捷键
- BIF 字符判断的内置函数
- java 常用类之String-StringBuffer
- amoeba实现mysql数据库读写分离
- JNI返回自定义结构体数组到Java
- 数据库事务的四大特性以及事务的隔离级别
- 作业
- 中断和异常的概念
- java简单实例
- NumPy基础练习(练一遍搞定NumPy)
- ZigBee串口说明
- Python高级可视化库seaborn分布分析(基础整理)
- Python一些特别的语法