java - JNI 将 TreeMap 从 java 传递到 c

标签 java c java-native-interface

我想用 jni 将 TreeMap 从 java 传递到 c。我调用 native 方法:

public native int getEuklid(TreeMap<int,short[]> map);
static {
 System.loadLibrary("Euklid");
}

现在在我的 c 文件中,我想访问 map 中的元素。我该怎么做。这是我的 c 文件的 header :

JNIEXPORT int JNICALL 
Java_Main_getEuklid (JNIEnv *env, jobject o, jobject o2)

其中 o2 是树状图。我如何处理像 Java 中的 TreeMap 一样的作业?

编辑:

我的错在哪里?:

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,从这里开始http://en.wikipedia.org/wiki/Java_Native_Interface .

关于java - JNI 将 TreeMap 从 java 传递到 c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16133902/

上一篇:C 初始化矩阵

下一篇:C套接字写太多次

相关文章:

此修订版需要代码建议

c - sizeof 运算符有可能返回 0 吗?

java - JNI 调用静态方法。类对象是必需的吗?

java - 加载库 Cryptopp 时获取 "Java Result: -1073741571"

java - java中精确获取小数点后的值

java - 如何将 Java 应用程序从 Tomcat 7/8/9 迁移到 Tomcat 10

java - SQL语句对象在哪些情况下会自动关闭?

c - C 中 "string"的定义

java - 如何在网络收获中从字符串中减去子字符串

c - 这是一个普通的 Bug 还是一个聪明的预编译器 Trick?