Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNI将树映射从java传递到c_Java_C_Java Native Interface - Fatal编程技术网

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

我想用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, 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)