1

インライン ネイティブ JNI 関数 getId を宣言しています。以下の %native スニペットで、java.lang.Object を返す方法を SWIG に伝える方法がわかりません。私は今のところ未定です。タイプマップが適切なアプローチだと思いますが、%native 関数を使用してネイティブ JNI メソッドに対してそれを宣言する方法がわかりません。何か案は?

%module Sample
%{
JNIEXPORT jobject JNICALL Java_com_test_SampleJNI_getID(JNIEnv *env, jclass cls) 
{
    jmethodID cnstrctr;
    jvalue args[2];
    jobject obj;
    jbyteArray bArray;

    bArray = (*env)->NewByteArray(env, 32);

   (*env)->SetByteArrayRegion(env, bArray, 0, 32, (jbyte *)foo);

   cls = (*env)->FindClass(env, "com/test/jni/DeviceId");
   cnstrctr = (*env)->GetMethodID(env, cls, "<init>", "(ILjava/lang/String;[B)V");

   args[0].i = (*env)->NewStringUTF(env, "id");
   args[1].i = bArray;

   obj = (*env)->NewObjectA(env, cls, cnstrctr, args);

   return obj;
}
%}
%native(getID) TBD getID();

DeviceId.java:

package com.test.jni;

public class DeviceId {
    private String id;
    private byte[] cache;

    public DeviceId(String id, byte[] cache){
        this.id=id;
        this.cache=cache;
    }

    public byte[] getCache() {
        return cache;
    }

    public void setCache(byte[] cache) {
        this.cache = cache;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }   
}
4

1 に答える 1