JNI - 将类实例发送到C ++

时间:2011-05-11 11:32:07

标签: c++ c java-native-interface

我想从Java向C ++发送类似结构的对象。由于java中没有结构,我想我必须编写一个类然后发送该类的实例。

public class soundSource {
     int posX;
     int posY;
     .....
}

但是...我从C ++中的JNI方法得到的jObject - 如何提取单个字段?

由于

2 个答案:

答案 0 :(得分:1)

jstr = (*env)->GetObjectField(env, obj, fid);

请参阅http://java.sun.com/docs/books/jni/html/fldmeth.html

您不是在任何地方“发送”数据。您只是使用JVM的JNI接口来访问数据。 你实际上甚至不需要该领域是公开的。只需对您感兴趣的类的所有字段执行此操作,就可以使用C ++填充结构。

答案 1 :(得分:1)

Dennis的答案是正确的,但是,还有另一种方法可以做到这一点,这可能会给你带来更好的性能,那就是通过直接的字节缓冲区。

以下是您需要阅读的文档: JNI NIO supportByteBuffer

您可以在Java端或C端分配直接字节缓冲区。然后根据c-struct的布局,使用ByteBuffer的方法在java端填充缓冲区。 请记住,在使用完缓冲区后必须释放这些缓冲区,但您可以重复使用相同的缓冲区来回传递数据。