JNI将树映射从java传递到c
我想用jni将一个树映射从java传递到c。我将本机方法称为:JNI将树映射从java传递到c,java,c,java-native-interface,Java,C,Java Native Interface,我想用jni将一个树映射从java传递到c。我将本机方法称为: public native int getEuklid(TreeMap<int,short[]> map); static { System.loadLibrary("Euklid"); } 其中o2是树状图。我如何处理像java中的树映射这样的作业对象 编辑: 我的错在哪里 JNIEXPORT int JNICALL Java_Main_getEuklid (JNIEnv *env, jobject o, job
public native int getEuklid(TreeMap<int,short[]> map);
static {
System.loadLibrary("Euklid");
}
其中o2是树状图。我如何处理像java中的树映射这样的作业对象
编辑:
我的错在哪里
JNIEXPORT int JNICALL
Java_Main_getEuklid (JNIEnv *env, jobject o, jobject o2){
jclass cls = env->GetObjectClass(o2) ;
jmethodID mGetValue = env->GetMethodID(cls, "keySet","()Ljava/util/Set;");
jobject value = env->CallObjectMethod(o2, mGetValue)
我成了:
In function ‘Java_Main_getEuklid’:
11: error: request for member ‘GetObjectClass’ in something not a structure or union
12: error: request for member ‘GetMethodID’ in something not a structure or union
13: error: request for member ‘CallObjectMethod’ in something not a structure or union
我是c语言的新手,我想测试一些东西,希望你能帮助我。我认为这是纯c代码。你应该这样写:
(*env)->GetObjectClass(env, o2)
换句话说,RTFM,从这里开始。相关:好的,谢谢你能解决我上面的问题。我还有一个问题:我用:gcc-Wall-O10-o test.c编译我的测试程序。它不需要超过一秒钟。如果我测试我创建的库,它会非常慢。我使用gcc-O10-I/System/library/Frameworks/JavaVM.framework/Headers-c-o Euklid.o Euklid.c创建库,然后使用gcc-O10-dynamiclib-o libeuklid.o…为什么我使用库时速度这么慢?@bladepit我不知道,也许最好提出另一个问题。我怀疑这是因为lib编译经常使用JDK头和lib,它可能是相当大的文件。尝试不进行优化(
-O10
),在开发过程中就可以了。
(*env)->GetObjectClass(env, o2)