JNI Java class与C struct对应

package javabeans;
public class Struct {
 public long id; 
 public int age;
 
 public native static Struct newStruct(long id, int age);
}

package javabeans;
public class MyStruct {
 private Struct struct;
 
 static{
  System.loadLibrary("struct_test2");
 }
  
 public native void setStruct(Struct struct);
 public native Struct getStruct();
 
 public void setStruct_J(Struct struct){
  this.struct = struct;
 }
 public Struct getStruct_J(){
  return this.struct;
 }
}


/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class javabeans_MyStruct */
#ifndef _Included_javabeans_MyStruct
#define _Included_javabeans_MyStruct
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     javabeans_MyStruct
 * Method:    setStruct
 * Signature: (Ljavabeans/Struct;)V
 */
JNIEXPORT void JNICALL Java_javabeans_MyStruct_setStruct
  (JNIEnv *, jobject, jobject);
/*
 * Class:     javabeans_MyStruct
 * Method:    getStruct
 * Signature: ()Ljavabeans/Struct;
 */
JNIEXPORT jobject JNICALL Java_javabeans_MyStruct_getStruct
  (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class javabeans_Struct */
#ifndef _Included_javabeans_Struct
#define _Included_javabeans_Struct
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     javabeans_Struct
 * Method:    newStruct
 * Signature: (JI)Ljavabeans/Struct;
 */
JNIEXPORT jobject JNICALL Java_javabeans_Struct_newStruct
  (JNIEnv *, jclass, jlong, jint);
#ifdef __cplusplus
}
#endif
#endif

Struct_Imp.cpp:
 
#include "javabeans_Struct.h"
JNIEXPORT jobject JNICALL Java_javabeans_Struct_newStruct
(JNIEnv *env, jclass jc_this, jlong jl_id, jint ji_age){
 jmethodID jm_init = env->GetMethodID(jc_this, "<init>", "()V"); //构造器方法
 jobject jobj_this = env->NewObject(jc_this, jm_init); //创建新对象
 
 jfieldID jf_id = env->GetFieldID(jc_this, "id", "J");
 jfieldID jf_age = env->GetFieldID(jc_this, "age", "I");
 env->SetLongField(jobj_this, jf_id, jl_id);
 env->SetIntField(jobj_this, jf_age, ji_age);
 
 return jobj_this;
}

MyStruct_Imp.cpp:
 
#include "javabeans_MyStruct.h"
struct {
 long id; 
 int age;
}Struct;
JNIEXPORT void JNICALL Java_javabeans_MyStruct_setStruct
(JNIEnv *env, jobject obj_this, jobject jobj_mystruct_struct){
 jclass jc_mystruct = env->FindClass("javabeans/MyStruct");
 jfieldID jf_mystruct_struct = env->GetFieldID(jc_mystruct, "struct", "Ljavabeans/Struct;");
 env->SetObjectField(obj_this, jf_mystruct_struct, jobj_mystruct_struct); 
}
JNIEXPORT jobject JNICALL Java_javabeans_MyStruct_getStruct
(JNIEnv *env, jobject obj_this){
 jclass jc_mystruct = env->FindClass("javabeans/MyStruct");
 jfieldID jf_mystruct_struct = env->GetFieldID(jc_mystruct, "struct", "Ljavabeans/Struct;");
 jobject jobj_struct = env->GetObjectField(obj_this, jf_mystruct_struct);
 return jobj_struct;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值