package com.sundy.jnidemo;import android.app.Activity;
import android.os.Bundle;
import java.lang.*;
public class CMFJ extends Activity {
/** Called when the activity is first created. */
static {
System.loadLibrary("CMFJ");
} public native DiskInfo[] getStructArray(); @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CMFJ changeJni = new CMFJ();
System.out.println("------------------返回一个结构数组 -----------");
DiskInfo[] diskList = changeJni.getStructArray();
int i;
for ( i = 0; i < diskList.length; i++) {
System.out.println("name:" + diskList[i].name);
System.out.println("Serial:" + diskList[i].serial);
} }
}package com.sundy.jnidemo;
import java.lang.*;public class DiskInfo
{
//名字
public String name;
//序列号
public int serial; //定义构造函数
DiskInfo(String name, int serial)
{
this.name = name;
this.serial = serial;
}
}
#include <stdio.h>
#include <math.h>
#include "jni.h"
#include <stdio.h>
#include "stdlib.h"
#include "string.h"
#pragma comment (lib,"BaseInfo.lib")
#pragma comment (lib,"jvm.lib")
#include "com_sundy_jnidemo_CMFJ.h"#include "com_sundy_jnidemo_DiskInfo.h"
struct {
char str[256];
int serial;
} DiskInfo;char* jstringToWindows( JNIEnv *env, jstring jstr );
//将windows类型转换成jstring类型
jstring WindowsTojstring( JNIEnv* env, char* str );
//主函数 JNIEXPORT jobjectArray JNICALL Java_com_sundy_jnidemo_CMFJ_getStructArray
(JNIEnv *env, jobject obj)
{
//申明一个object数组
jobjectArray args=0 ;
//数组大小
jsize len = 5;
//获取object所属类,一般为ava/lang/Object就可以了
jclass objjClass = (*env)->FindClass(env,"java/lang/Object");
//新建object数组
args = (*env)->NewObjectArray(env,len, objjClass,0);
/**//* 下面为获取到Java中对应的实例类中的变量*/
//获取Java中的实例类
jclass objectClass = (*env)-> FindClass(env,"com/sundy/jnidemo/DiskInfo");
//获取类中每一个变量的定义
//名字
jmethodID init = (*env)->GetMethodID(env, objectClass , "<init>", "(Ljava/lang/String;I)V"); //给每一个实例的变量付值
jobject newObj = (*env)->NewObject(env, objectClass, init, (*env)->NewStringUTF(env, "my name is D:"), 10);
//给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中
int i;
for( i=0; i < len; i++ )
{
//添加到objcet数组中
(*env)->SetObjectArrayElement(env,args, i, newObj);
}
//返回object数组
return args;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货