我要加入 登录
声振论坛 返回首页

impulse的个人空间 http://home.vibunion.com/?41382 [收藏] [复制] [分享] [RSS]

日志

用JNI从C传递结构体到JAVA

已有 574 次阅读2017-7-4 17:20

1、直接上C的实现
typedef struct Foo {
    int len;
    char name[100];
} Foo_t;

JNIEXPORT jint JNICALL
Java_TestJNI_foo(JNIEnv *env, jobject obj, jobject fooObj) {

    Foo_t * bar = malloc(sizeof(Foo_t));
    jclass clazz;
    jfieldID fid;

    //init the bar data of C
    strcpy(bar->name, "Yachun Miao");
    bar->len = strlen(bar->name);

    // mapping bar of C to foo
    clazz = (*env)->GetObjectClass(env, fooObj);
    if (0 == clazz) {
        printf("GetObjectClass returned 0\n");
        return (-1);
    }
    fid = (*env)->GetFieldID(env, clazz, "len", "I");
    (*env)->SetLongField(env, fooObj, fid, bar->len);

    fid = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;");
    jstring name = (*env)->NewStringUTF(env, bar->name);
    (*env)->SetObjectField(env, fooObj, fid, name);

    free(bar);
    return 0;
}
2、对应的Java调用
public class Foo {
    protected int len;
    protected String name;
}


    private static native int foo(Foo fooObj);

    public static void main(String args[]) {
        System.loadLibrary("mylib");

        Foo foo = new Foo();
        foo(foo);
        System.out.println(foo.name);
        System.out.println(foo.len);

    }

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 我要加入

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-3-29 03:32 , Processed in 0.035248 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部