C代码如下
#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 objClass = (*env)->FindClass(env,"java/lang/Object");
//新建object数组
args = (*env)->NewObjectArray(env,len, objClass,0);
/**//* 下面为获取到Java中对应的实例类中的变量*/
//获取Java中的实例类
jclass objectClass = (*env)-> FindClass(env,"com/sundy/jnidemo/DiskInfo");
//给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中
//获取类中每一个变量的定义
//名字
jmethodID init = (*env)->GetMethodID(env, objectClass , "<init>", "(Ljava/lang/String;I)V");
int i;
for( i=0; i < len; i++ )
{
//给每一个实例的变量付值
jobject newObj = (*env)->NewObject(env, objectClass, init, (*env)->NewStringUTF(env, "my name is D:"), 10);
//添加到objcet数组中
(*env)->SetObjectArrayElement(env,args, i, newObj);
}
//返回object数组
return args;
}
但是结果出不来,求指正!
------解决方案--------------------
单个结构体还是可以返回的,用java的类与C的结构体对应,如果你想返回结构体数组的话,只能用上面的人说的bytearray返回了,java层在逐次解析出来
如果是后者的话,会比较麻烦,建议LZ换一种思路考虑吧。。。。。