我想从Java向C ++发送类似结构的对象。由于java中没有结构,我想我必须编写一个类然后发送该类的实例。
public class soundSource {
int posX;
int posY;
.....
}
但是...我从C ++中的JNI方法得到的jObject - 如何提取单个字段?
由于
答案 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 support, ByteBuffer
您可以在Java端或C端分配直接字节缓冲区。然后根据c-struct的布局,使用ByteBuffer的方法在java端填充缓冲区。 请记住,在使用完缓冲区后必须释放这些缓冲区,但您可以重复使用相同的缓冲区来回传递数据。