62,614
社区成员
发帖
与我相关
我的任务
分享
public class A
{
B[] array;
static
{
System.loadLibrary("A");
}
public native void fun(); //用于给数组赋值
public static void main(String[] args)
{
A a = new A();
a.fun();
for (B b : a.array)
{
System.out.println(b.topic);
}
}
}
class B
{
int topic;
}
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class A */
#ifndef _Included_A
#define _Included_A
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: A
* Method: fun
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_A_fun
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
#include "A.h"
#define ARRAY_LENGTH 10
/*
* Class: A
* Method: fun
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_A_fun
(JNIEnv * env, jobject this_obj)
{
jclass class_B = (*env)->FindClass(env, "B");
jclass class_A = (*env)->FindClass(env, "A");
jfieldID fid_topic = (*env)->GetFieldID(env, class_B, "topic", "I");
jfieldID fid_array = (*env)->GetFieldID(env, class_A, "array", "[LB;");
jmethodID mid_B = (*env)->GetMethodID(env, class_B, "<init>", "()V");
jmethodID mid_A = (*env)->GetMethodID(env, class_A, "<init>", "()V");
jobjectArray obj_arrayB = (*env)->NewObjectArray(env, (jsize) ARRAY_LENGTH, class_B, 0);
int i = 0;
for (; i < ARRAY_LENGTH; i++)
{
jobject obj_B = (*env)->NewObject(env, class_B, mid_B);
(*env)->SetIntField(env, obj_B, fid_topic, i);
(*env)->SetObjectArrayElement(env, obj_arrayB, i, obj_B);
}
(*env)->SetObjectField(env, this_obj, fid_array, obj_arrayB);
}
public class Main {
public native void g(String[] arr);
private String[] arr;
}
JNIEXPORT void JNICALL Java_dll_1test_Main_g
(JNIEnv *env, jobject this, jobjectArray arr)
{
JNIEnv _env = *env;
jclass clazz = _env->GetObjectClass(env, this);
jfieldID fid = _env->GetFieldID(env, clazz, "arr", "[Ljava/lang/String;");
if (fid == NULL)
{
return;
}
_env->SetObjectField(env, this, fid, arr);
}