如何在JNI中将指针从java传递到C?

如何在JNI中将指针从java传递到C?,java,pointers,java-native-interface,Java,Pointers,Java Native Interface,我有一个本地方法intsum(int*,int*)。如何从java端传递此方法的参数 编辑:我成功运行的示例方法是 双gsl统计平均值(双数组,整数,整数); 这个方法在GSL中是可用的,因为我已经创建了共享对象,并且从java端发送了所需的参数,我得到了双精度作为返回值。看看它是关于通过JNI在C和java之间传递指针的,除非需要使用JNI,否则它可能是更好的选择。我发现它更易于使用。如果该方法不更改引用的值,那么您只需将参数作为值传递,并在本机代码中获取它们的地址: JNIEXPORT ji

我有一个本地方法
intsum(int*,int*)
。如何从java端传递此方法的参数

编辑:我成功运行的示例方法是 双gsl统计平均值(双数组,整数,整数);
这个方法在GSL中是可用的,因为我已经创建了共享对象,并且从java端发送了所需的参数,我得到了双精度作为返回值。

看看它是关于通过JNI在C和java之间传递指针的,除非需要使用JNI,否则它可能是更好的选择。我发现它更易于使用。

如果该方法不更改引用的值,那么您只需将参数作为值传递,并在本机代码中获取它们的地址:

JNIEXPORT jint JNICALL Java_com_example_Summator_sum(JNIEnv *env, jobject thisObj,
        jint firstAddend, jint secondAddend) {
     return (jint) sum(&firstAddend, &secondAddend);
}
Java中的方法是:

native int sum(int firstAdded, int secondAddend);

显然,除了在
sum
函数中,您不需要在任何地方使用指针,因此没有理由在Java中使用它们。

取决于此参数必须包含的内容。这个方法期望得到什么?它期望得到两个整数的地址,它将对接收到的参数(而不是地址)进行加法,并返回和。@Malcolm我的主要目的是了解当本机(C)发生错误时,从java端传递什么方法需要指针作为参数。所以它不会更改引用的值,对吗?是的,不会,但它必须返回sum。感谢您的响应,但是讨论中包含的结构比指针更多。你能简单地告诉我如何单独将指针从java传递到c吗?是的,你完全正确。但问题是方法的定义与我无关,我只是有权使用它。所以我需要一种方法来从java端传递指针。@johnkrishna但你说你使用JNI,这意味着你在java中将方法定义为本机方法,并在本机代码中实现它们。如果不允许您这样做,您打算如何使用JNI?所有讨论的内容都是正确的。但我这篇文章的主要目的是当本机方法需要指针时,从java端传递什么,以及如何使用。@johnkrishna当本机函数需要指针时,您传递的内容将在本机端转换为指针。我的回答说明了它是如何做到的。如果要将指针从Java传递到本机代码,可以通过一个长参数轻松完成。但是它的值仍然必须起源于本机代码中的某个地方,然后可以传递给Java并返回。如果你想得到一个指向存储在Java中的字段或变量的指针,这显然是不可能的,因为Java将程序与直接内存管理隔离开来。好的,现在我要直截了当地说。我们有一个开源库GSL,在这里我们没有方法定义,但我们仍然可以为它们创建共享对象,并且可以通过jni(从java端调用这些方法)使用这些函数。当本机方法需要基本数据类型并且我已经成功地使用了它们时,一切都很好(注意,我没有带函数定义)。问题是有些方法希望指针作为其参数。如何传递参数以利用其功能。感谢您的合作。