50,554
社区成员
发帖
与我相关
我的任务
分享
JNIEXPORT jobject JNICALL Com _displayaudio _get_HistoryData(JNIEnv *env, jobject obj)
{
HistroyInfo dhif;
/*************
* DateInfo*
*************/
//获取Java中的实例类
jclass jcDdi = env->FindClass("com/displayaudio/DateInfo");
//获取类中每一个变量的定义
jfieldID jfyear = (env)->GetFieldID(jcDdi,"year","I");
jfieldID jfmonth = (env)->GetFieldID(jcDdi,"month","I");
jfieldID jfday = (env)->GetFieldID(jcDdi,"day","I");
jfieldID jfhour = (env)->GetFieldID(jcDdi,"hour","I");
jfieldID jfmin = (env)->GetFieldID(jcDdi,"min","I");
jfieldID jfsec = (env)->GetFieldID(jcDdi,"sec","I");
/****************
* PositionInfo *
****************/
//获取Java中的实例类
jclass jcDpi = env->FindClass("com/displayaudio/PositionInfo");
//获取类中每一个变量的定义
jfieldID jflatitudes_degree = (env)->GetFieldID(jcDpi,"latitudes_degree","I");
jfieldID jflatitudes_min = (env)->GetFieldID(jcDpi,"latitudes_min","I");
jfieldID jflatitudes_sec = (env)->GetFieldID(jcDpi,"latitudes_sec","I");
jfieldID jflongitude_degree = (env)->GetFieldID(jcDpi,"longitude_degree","I");
jfieldID jflongitude_min = (env)->GetFieldID(jcDpi,"longitude_min","I");
jfieldID jflongitude_sec = (env)->GetFieldID(jcDpi,"longitude_sec","I");
/**************
* HistoryData *
***************/
//获取Java中的实例类
jclass jcDhd = env->FindClass("com/displayaudio/HistoryData");
//获取类中每一个变量的定义
//DateInfo receiveTime
jfieldID jfreceiveTime = env->GetFieldID(jcDhd, "receiveTime", "Lcom/displayaudio/DateInfo;");
//DateInfo provideTime
jfieldID jfprovideTime = env->GetFieldID(jcDhd, "provideTime", "Lcom/displayaudio/DateInfo;");
//int serviceType
jfieldID jfserviceType = env->GetFieldID(jcDhd, "serviceType", "I");
//PositionInfo receivePosition
jfieldID jfreceivePosition = env->GetFieldID(jcDhd, "receivePosition", "Lcom/displayaudio/PositionInfo;");
//int RoadNo
jfieldID jfRoadNo = env->GetFieldID(jcDhd, "roadNo", "I");
//int provideServiceNo
jfieldID jfprovideServiceNo = env->GetFieldID(jcDhd, "provideServiceNo", "I");
//PositionInfo noticePosition
jfieldID jfnoticePosition = env->GetFieldID(jcDhd, "noticePosition", "Lcom/displayaudio/PositionInfo;");
//PositionInfo serviceoutPosition
jfieldID jfserviceoutPosition = env->GetFieldID(jcDhd, "serviceoutPosition", "Lcom/displayaudio/PositionInfo;");
//int judgmentResult
jfieldID jfjudgmentResult = env->GetFieldID(jcDhd, "judgmentResult", "I");
/*************
* HistoryInfo*
**************/
//获取Java中的实例类
jclass jcDhi = env->FindClass("com/displayaudio/HistoryInfo");
//int History_num
jfieldID jfHistory_num = env->GetFieldID(jcDhi, "History_num", "I");
//HistoryData History[]
jfieldID jfHistoryData = env->GetFieldID(jcDhi, "History", "[Lcom/displayaudio/HistoryData;");
//新建object
jobject joDhi = env->AllocObject(jcDhi);
//这里创建一个java的HistoryInfo类中的数组,容量为100,第一个数据为joDhd
jobjectArray joRecArr = env->NewObjectArray(100,jcDhd,0);
//给每一个实例的变量付值
for(int i=0; i < _HISTORY_DATA_MAX; i++ )
{
//新建object
jobject joDdi = env->AllocObject(jcDdi);
env->SetIntField(joDdi, jfyear, dhif.History[i].receiveTime.year);
env->SetIntField(joDdi, jfmonth, dhif.History[i].receiveTime.month);
env->SetIntField(joDdi, jfday, dhif.History[i].receiveTime.day);
env->SetIntField(joDdi, jfhour, dhif.History[i].receiveTime.hour);
env->SetIntField(joDdi, jfmin, dhif.History[i].receiveTime.min);
env->SetIntField(joDdi, jfsec, dhif.History[i].receiveTime.sec);
jobject joDdi1 = env->AllocObject(jcDdi);
env->SetIntField(joDdi1, jfyear, dhif.History[i].provideTime.year);
env->SetIntField(joDdi1, jfmonth, dhif.History[i].provideTime.month);
env->SetIntField(joDdi1, jfday, dhif.History[i].provideTime.day);
env->SetIntField(joDdi1, jfhour, dhif.History[i].provideTime.hour);
env->SetIntField(joDdi1, jfmin, dhif.History[i].provideTime.min);
env->SetIntField(joDdi1, jfsec, dhif.History[i].provideTime.sec);
//新建object
jobject joDpi = env->AllocObject(jcDpi);
env->SetIntField(joDpi, jflatitudes_degree, dhif.History[i].receivePosition.latitudes_degree);
env->SetIntField(joDpi, jflatitudes_min, dhif.History[i].receivePosition.latitudes_min);
env->SetIntField(joDpi, jflatitudes_sec, dhif.History[i].receivePosition.latitudes_sec);
env->SetIntField(joDpi, jflongitude_degree, dhif.History[i].receivePosition.longitude_degree);
env->SetIntField(joDpi, jflongitude_min, dhif.History[i].receivePosition.longitude_min);
env->SetIntField(joDpi, jflongitude_sec, dhif.History[i].receivePosition.longitude_sec);
jobject joDpi1= env->AllocObject(jcDpi);
env->SetIntField(joDpi1, jflatitudes_degree, dhif.History[i].noticePosition.latitudes_degree);
env->SetIntField(joDpi1, jflatitudes_min, dhif.History[i].noticePosition.latitudes_min);
env->SetIntField(joDpi1, jflatitudes_sec, dhif.History[i].noticePosition.latitudes_sec);
env->SetIntField(joDpi1, jflongitude_degree, dhif.History[i].noticePosition.longitude_degree);
env->SetIntField(joDpi1, jflongitude_min, dhif.History[i].noticePosition.longitude_min);
env->SetIntField(joDpi1, jflongitude_sec, dhif.History[i].noticePosition.longitude_sec);
jobject joDpi2= env->AllocObject(jcDpi);
env->SetIntField(joDpi2, jflatitudes_degree, dhif.History[i].serviceoutPosition.latitudes_degree);
env->SetIntField(joDpi2, jflatitudes_min, dhif.History[i].serviceoutPosition.latitudes_min);
env->SetIntField(joDpi2, jflatitudes_sec, dhif.History[i].serviceoutPosition.latitudes_sec);
env->SetIntField(joDpi2, jflongitude_degree, dhif.History[i].serviceoutPosition.longitude_degree);
env->SetIntField(joDpi2, jflongitude_min, dhif.History[i].serviceoutPosition.longitude_min);
env->SetIntField(joDpi2, jflongitude_sec, dhif.History[i].serviceoutPosition.longitude_sec);
//新建object
jobject joDhd = env->AllocObject(jcDhd);
env->SetObjectField(joDhd, jfreceiveTime, joDdi);
env->SetObjectField(joDhd, jfprovideTime, joDdi1);
env->SetObjectField(joDhd, jfreceivePosition, joDpi);
env->SetObjectField(joDhd, jfnoticePosition, joDpi1);
env->SetObjectField(joDhd, jfserviceoutPosition, joDpi2);
env->SetIntField(joDhd, jfserviceType, dhif.History[i].serviceType);
env->SetIntField(joDhd, jfRoadNo, dhif.History[i].RoadNo);
env->SetIntField(joDhd, jfprovideServiceNo, dhif.History[i].provideServiceNo);
env->SetIntField(joDhd, jfjudgmentResult, dhif.History[i].judgmentResult);
env->SetObjectArrayElement(joRecArr, i, joDhd);
}
//给每一个实例的变量付值
env->SetIntField(joDhi,jfHistory_num,dhif.History_num);
//把这个数组赋值到java的HistoryInfo对象的HistoryData属性上
env->SetObjectField(joDhi, jfHistoryData, joRecArr);
return joDhi;
}
//新建object
//给每一个实例的变量付值
for(int i=0; i < _HISTORY_DATA_MAX; i++ )
{
jobject joDhd = env->AllocObject(jcDhd);
env->SetObjectField(joDhd, jfreceiveTime, joDdi);
env->SetObjectField(joDhd, jfprovideTime, joDdi);
env->SetObjectField(joDhd, jfreceivePosition, joDpi);
env->SetObjectField(joDhd, jfnoticePosition, joDpi);
env->SetObjectField(joDhd, jfserviceoutPosition, joDpi);
env->SetIntField(joDhd, jfserviceType, dhif.History[i].serviceType);
env->SetIntField(joDhd, jfRoadNo, dhif.History[i].RoadNo);
env->SetIntField(joDhd, jfprovideServiceNo, dhif.History[i].provideServiceNo);
env->SetIntField(joDhd, jfjudgmentResult, dhif.History[i].judgmentResult);
}
红色标记内容出现如下error
env->SetObjectField(joDhd, jfreceiveTime, joDdi);
env->SetObjectField(joDhd, jfprovideTime, joDdi);
env->SetObjectField(joDhd, jfreceivePosition, joDpi);
env->SetObjectField(joDhd, jfnoticePosition, joDpi);
env->SetObjectField(joDhd, jfserviceoutPosition, joDpi);
Invalid arguments '
Symbol 'joDdi' could not be resolved Controller.cpp
Invalid arguments '
Symbol 'joDpi' could not be resolved Controller.cpp
//新建object
jobject joDdi = env->AllocObject(jcDdi);
env->SetIntField(joDdi, jfyear, dhif.History[i].receiveTime.year);
env->SetIntField(joDdi, jfmonth, dhif.History[i].receiveTime.month);
env->SetIntField(joDdi, jfday, dhif.History[i].receiveTime.day);
env->SetIntField(joDdi, jfhour, dhif.History[i].receiveTime.hour);
env->SetIntField(joDdi, jfmin, dhif.History[i].receiveTime.min);
env->SetIntField(joDdi, jfsec, dhif.History[i].receiveTime.sec);
env->SetIntField(joDdi, jfyear, dhif.History[i].provideTime.year);
env->SetIntField(joDdi, jfmonth, dhif.History[i].provideTime.month);
env->SetIntField(joDdi, jfday, dhif.History[i].provideTime.day);
env->SetIntField(joDdi, jfhour, dhif.History[i].provideTime.hour);
env->SetIntField(joDdi, jfmin, dhif.History[i].provideTime.min);
env->SetIntField(joDdi, jfsec, dhif.History[i].provideTime.sec);
这段都放到你需要用到joDdi的循环中,这些都是基本的逻辑,楼主应该很容易就看到问题所在的JNIEXPORT jobject JNICALL Com _displayaudio _get_HistoryData(JNIEnv *env, jobject obj)
{
HistroyInfo dhif;
dhif.History_num = 100;
dhif.History[0].provideTime.year= 2014;
dhif.History[0].provideTime.month= 1;
dhif.History[0].provideTime.day= 1;
dhif.History[0].provideTime.hour= 23;
dhif.History[0].provideTime.min= 59;
dhif.History[0].provideTime.sec= 59;
dhif.History[0].receiveTime.year= 2050;
dhif.History[0].receiveTime.month= 6;
dhif.History[0].receiveTime.day= 15;
dhif.History[0].receiveTime.hour= 12;
dhif.History[0].receiveTime.min= 30;
dhif.History[0].receiveTime.sec= 30;
dhif.History[0].receivePosition.latitudes_degree= 116;
dhif.History[0].receivePosition.latitudes_min= 20;
dhif.History[0].receivePosition.latitudes_sec= 12;
dhif.History[0].receivePosition.longitude_degree= 39;
dhif.History[0].receivePosition.longitude_min= 12;
dhif.History[0].receivePosition.longitude_sec= 34;
dhif.History[0].noticePosition.latitudes_degree= 39;
dhif.History[0].noticePosition.latitudes_min= 12;
dhif.History[0].noticePosition.latitudes_sec= 34;
dhif.History[0].noticePosition.longitude_degree= 116;
dhif.History[0].noticePosition.longitude_min= 20;
dhif.History[0].noticePosition.longitude_sec= 15;
dhif.History[0].serviceoutPosition.latitudes_degree= 39;
dhif.History[0].serviceoutPosition.latitudes_min= 12;
dhif.History[0].serviceoutPosition.latitudes_sec= 34;
dhif.History[0].serviceoutPosition.longitude_degree= 116;
dhif.History[0].serviceoutPosition.longitude_min= 20;
dhif.History[0].serviceoutPosition.longitude_sec= 15;
dhif.History[0].serviceType= 222;
dhif.History[0].RoadNo= 333;
dhif.History[0].provideServiceNo= 444;
dhif.History[0].judgmentResult= 1;
/*************
* DateInfo*
*************/
//获取Java中的实例类
jclass jcDdi = env->FindClass("com/displayaudio/DateInfo");
//获取类中每一个变量的定义
jfieldID jfyear = (env)->GetFieldID(jcDdi,"year","I");
jfieldID jfmonth = (env)->GetFieldID(jcDdi,"month","I");
jfieldID jfday = (env)->GetFieldID(jcDdi,"day","I");
jfieldID jfhour = (env)->GetFieldID(jcDdi,"hour","I");
jfieldID jfmin = (env)->GetFieldID(jcDdi,"min","I");
jfieldID jfsec = (env)->GetFieldID(jcDdi,"sec","I");
//新建object
jobject joDdi = env->AllocObject(jcDdi);
//给每一个实例的变量付值
for(int i=0; i < _HISTORY_DATA_MAX; i++ )
{
env->SetIntField(joDdi, jfyear, dhif.History[i].receiveTime.year);
env->SetIntField(joDdi, jfmonth, dhif.History[i].receiveTime.month);
env->SetIntField(joDdi, jfday, dhif.History[i].receiveTime.day);
env->SetIntField(joDdi, jfhour, dhif.History[i].receiveTime.hour);
env->SetIntField(joDdi, jfmin, dhif.History[i].receiveTime.min);
env->SetIntField(joDdi, jfsec, dhif.History[i].receiveTime.sec);
env->SetIntField(joDdi, jfyear, dhif.History[i].provideTime.year);
env->SetIntField(joDdi, jfmonth, dhif.History[i].provideTime.month);
env->SetIntField(joDdi, jfday, dhif.History[i].provideTime.day);
env->SetIntField(joDdi, jfhour, dhif.History[i].provideTime.hour);
env->SetIntField(joDdi, jfmin, dhif.History[i].provideTime.min);
env->SetIntField(joDdi, jfsec, dhif.History[i].provideTime.sec);
}
/****************
* PositionInfo *
****************/
//获取Java中的实例类
jclass jcDpi = env->FindClass("com/displayaudio/PositionInfo");
//获取类中每一个变量的定义
jfieldID jflatitudes_degree = (env)->GetFieldID(jcDpi,"latitudes_degree","I");
jfieldID jflatitudes_min = (env)->GetFieldID(jcDpi,"latitudes_min","I");
jfieldID jflatitudes_sec = (env)->GetFieldID(jcDpi,"latitudes_sec","I");
jfieldID jflongitude_degree = (env)->GetFieldID(jcDpi,"longitude_degree","I");
jfieldID jflongitude_min = (env)->GetFieldID(jcDpi,"longitude_min","I");
jfieldID jflongitude_sec = (env)->GetFieldID(jcDpi,"longitude_sec","I");
//新建object
jobject joDpi = env->AllocObject(jcDpi);
//给每一个实例的变量付值
for(int i=0; i < _HISTORY_DATA_MAX; i++ )
{
env->SetIntField(joDpi, jflatitudes_degree, dhif.History[i].receivePosition.latitudes_degree);
env->SetIntField(joDpi, jflatitudes_min, dhif.History[i].receivePosition.latitudes_min);
env->SetIntField(joDpi, jflatitudes_sec, dhif.History[i].receivePosition.latitudes_sec);
env->SetIntField(joDpi, jflongitude_degree, dhif.History[i].receivePosition.longitude_degree);
env->SetIntField(joDpi, jflongitude_min, dhif.History[i].receivePosition.longitude_min);
env->SetIntField(joDpi, jflongitude_sec, dhif.History[i].receivePosition.longitude_sec);
env->SetIntField(joDpi, jflatitudes_degree, dhif.History[i].noticePosition.latitudes_degree);
env->SetIntField(joDpi, jflatitudes_min, dhif.History[i].noticePosition.latitudes_min);
env->SetIntField(joDpi, jflatitudes_sec, dhif.History[i].noticePosition.latitudes_sec);
env->SetIntField(joDpi, jflongitude_degree, dhif.History[i].noticePosition.longitude_degree);
env->SetIntField(joDpi, jflongitude_min, dhif.History[i].noticePosition.longitude_min);
env->SetIntField(joDpi, jflongitude_sec, dhif.History[i].noticePosition.longitude_sec);
env->SetIntField(joDpi, jflatitudes_degree, dhif.History[i].serviceoutPosition.latitudes_degree);
env->SetIntField(joDpi, jflatitudes_min, dhif.History[i].serviceoutPosition.latitudes_min);
env->SetIntField(joDpi, jflatitudes_sec, dhif.History[i].serviceoutPosition.latitudes_sec);
env->SetIntField(joDpi, jflongitude_degree, dhif.History[i].serviceoutPosition.longitude_degree);
env->SetIntField(joDpi, jflongitude_min, dhif.History[i].serviceoutPosition.longitude_min);
env->SetIntField(joDpi, jflongitude_sec, dhif.History[i].serviceoutPosition.longitude_sec);
}
/**************
* HistoryData *
*************** /
//获取Java中的实例类
jclass jcDhd = env->FindClass("com/displayaudio/HistoryData");
//获取类中每一个变量的定义
//DateInfo receiveTime
jfieldID jfreceiveTime = env->GetFieldID(jcDhd, "receiveTime", "Lcom/displayaudio/DateInfo;");
//DateInfo provideTime
jfieldID jfprovideTime = env->GetFieldID(jcDhd, "provideTime", "Lcom/displayaudio/DateInfo;");
//int serviceType
jfieldID jfserviceType = env->GetFieldID(jcDhd, "serviceType", "I");
//PositionInfo receivePosition
jfieldID jfreceivePosition = env->GetFieldID(jcDhd, "receivePosition", "Lcom/displayaudio/PositionInfo;");
//int RoadNo
jfieldID jfRoadNo = env->GetFieldID(jcDhd, "roadNo", "I");
//int provideServiceNo
jfieldID jfprovideServiceNo = env->GetFieldID(jcDhd, "provideServiceNo", "I");
//PositionInfo noticePosition
jfieldID jfnoticePosition = env->GetFieldID(jcDhd, "noticePosition", "Lcom/displayaudio/PositionInfo;");
//PositionInfo serviceoutPosition
jfieldID jfserviceoutPosition = env->GetFieldID(jcDhd, "serviceoutPosition", "Lcom/displayaudio/PositionInfo;");
//int judgmentResult
jfieldID jfjudgmentResult = env->GetFieldID(jcDhd, "judgmentResult", "I");
//新建object
jobject joDhd = env->AllocObject(jcDhd);
//给每一个实例的变量付值
for(int i=0; i < _HISTORY_DATA_MAX; i++ )
{
env->SetObjectField(joDhd, jfreceiveTime, joDdi);
env->SetObjectField(joDhd, jfprovideTime, joDdi);
env->SetObjectField(joDhd, jfreceivePosition, joDpi);
env->SetObjectField(joDhd, jfnoticePosition, joDpi);
env->SetObjectField(joDhd, jfserviceoutPosition, joDpi);
env->SetIntField(joDhd, jfserviceType, dhif.History[i].serviceType);
env->SetIntField(joDhd, jfRoadNo, dhif.History[i].RoadNo);
env->SetIntField(joDhd, jfprovideServiceNo, dhif.History[i].provideServiceNo);
env->SetIntField(joDhd, jfjudgmentResult, dhif.History[i].judgmentResult);
}
/*************
* HistoryInfo*
**************/
//获取Java中的实例类
jclass jcDhi = env->FindClass("com/displayaudio/HistoryInfo");
//int History_num
jfieldID jfHistory_num = env->GetFieldID(jcDhi, "History_num", "I");
//HistoryData History[]
jfieldID jfHistoryData = env->GetFieldID(jcDhi, "History", "[Lcom/displayaudio/HistoryData;");
//新建object
jobject joDhi = env->AllocObject(jcDhi);
//给每一个实例的变量付值
env->SetIntField(joDhi,jfHistory_num,dhif.History_num);
//这里创建一个java的HistoryInfo类中的数组,容量为100,第一个数据为joDhd
jobjectArray joRecArr = env->NewObjectArray(100,jcDhd,joDhd);
//把这个数组赋值到java的HistoryInfo对象的HistoryData属性上
env->SetObjectField(joDhi, jfHistoryData, joRecArr);
return joDhi;
}
public class PositionInfo {
public int latitudes_degree;
public int latitudes_min;
public int latitudes_sec;
public int longitude_degree ;
public int longitude_min;
public int longitude_sec;
}
public class DateInfo {
public int year;
public int month;
public int day;
public int hour;
public int min;
public int sec;
}
public class HistoryData {
public DateInfo receiveTime;
public DateInfo provideTime;
public int serviceType;
public PositionInfo receivePosition;
public int roadNo;
public int provideServiceNo;
public PositionInfo noticePosition;
public PositionInfo serviceoutPosition;
public int judgmentResult;
}
public class HistoryInfo{
public int History_num;
public HistoryData[] History;
}
2.//Service.java
public class Service extends IService.Stub {
static {
System.loadLibrary("Controller");
}
public native HistoryInfo get_HistoryData();
}
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeModule */
#ifndef _Included_NativeModule
#define _Included_NativeModule
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeModule
* Method: getInfo
* Signature: ()LMyInfo;
*/
JNIEXPORT jobject JNICALL Java_NativeModule_getInfo
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
java代码MyInfo中的Record rec变成Record rec[];以下是C中的JNI具体的代码
#include <stdio.h>
#include <windows.h>
#include "NativeModule.h"
typedef struct{
int id;
char name[255];
char data[255];
}Record;
typedef struct{
BOOL b;
char c;
double d;
int i;
char arr[255];
char sz[255];
Record rec[10];//这里也用数组
}MyInfo;
JNIEXPORT jobject JNICALL Java_NativeModule_getInfo (JNIEnv *env, jobject jo){
wchar_t wStr[255] = {0};
char chTmp[] = "Hello JNI";
int nTmpLen = strlen(chTmp);
//将C结构体转换成Java类
MyInfo mi;
memcpy(mi.arr, chTmp, strlen(chTmp));
mi.b = TRUE;
mi.c = 'B';
mi.d = 2000.9;
mi.i = 8;
strcpy(mi.sz, "Hello World!");
mi.rec[0].id = 2011;//所有rec操作的地方加上下标
memcpy(mi.rec[0].data, "\x01\x02\x03\x04\x05\x06", 6);
strcpy(mi.rec[0].name, "My JNI");
//获取Java中的实例类Record
jclass jcRec = env->FindClass("com/jinhill/util/Record");
//int id
jfieldID jfid = env->GetFieldID(jcRec, "id", "I");
//String name
jfieldID jfname = env->GetFieldID(jcRec, "name", "Ljava/lang/String;");
//byte[] data;
jfieldID jfdata = env->GetFieldID(jcRec, "data", "[B");
//获取Java中的实例类
jclass jcInfo = env->FindClass("MyInfo");
//获取类中每一个变量的定义
//boolean b
jfieldID jfb = env->GetFieldID(jcInfo, "b", "Z");
//char c
jfieldID jfc = env->GetFieldID(jcInfo, "c", "C");
//double d
jfieldID jfd = env->GetFieldID(jcInfo, "d", "D");
//int i
jfieldID jfi = env->GetFieldID(jcInfo, "i", "I");
//byte[] array
jfieldID jfa = env->GetFieldID(jcInfo, "array", "[B");
//String s
jfieldID jfs = env->GetFieldID(jcInfo, "s", "Ljava/lang/String;");
//Record rec;
jfieldID jfrec = env->GetFieldID(jcInfo, "rec", "[Lcom/jinhill/util/Record;");
//创建新的对象
jobject joRec = env->AllocObject(jcRec);
env->SetIntField(joRec, jfid, mi.rec[0].id);
jstring jstrn = env->NewStringUTF(mi.rec[0].name);
env->SetObjectField(joRec, jfname, jstrn);
jbyteArray jbarr = env->NewByteArray(6);
jbyte *jb = env->GetByteArrayElements(jbarr, 0);
memcpy(jb, mi.rec[0].data, 6);
env->SetByteArrayRegion(jbarr, 0, 6, jb);
env->SetObjectField(joRec, jfdata, jbarr);
//创建新的对象
jobject joInfo = env->AllocObject(jcInfo);
//给类成员赋值
env->SetBooleanField(joInfo, jfb, mi.b);
env->SetCharField(joInfo, jfc, (jchar)mi.c);
env->SetDoubleField(joInfo, jfd, mi.d);
env->SetIntField(joInfo, jfi, mi.i);
jbyteArray jarr = env->NewByteArray(nTmpLen);
jbyte *jby = env->GetByteArrayElements(jarr, 0);
memcpy(jby, mi.arr, nTmpLen);
env->SetByteArrayRegion(jarr, 0, nTmpLen, jby);
env->SetObjectField(joInfo, jfa, jarr);
jstring jstrTmp = env->NewStringUTF(chTmp);
env->SetObjectField(joInfo, jfs, jstrTmp);
//这里创建一个java的MyInfo类中的Record数组,容量为10,第一个数据为joRec
jobjectArray joRecArr = env->NewObjectArray(10,jcRec,joRec);
//把这个数组赋值到java的MyInfo对象的rec属性上
env->SetObjectField(joInfo, jfrec, joRecArr);
return joInfo;
}