预期的`*mut jni::sys::_jobject`,在Rust JNI调用中发现结构体`jni::objects::JPrimitiveArray`错误

fnvucqvd  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(208)

我试图从java包中调用一个rust库,作为其中的一部分,我在通过网络发送对象之前转换(序列化)它。
然而,我得到了以下错误。

expected `*mut jni::sys::_jobject`, found struct `jni::objects::JPrimitiveArray`

代码示例:

fn serialize_response<T: Message>(
    env: &JNIEnv,
    value: T,
) -> Result<jbyteArray, ClientJniError> {
    let serialized = value.write_to_bytes()?;
    Ok(env.byte_array_from_slice(serialized.as_slice())?)
}

我到底做错了什么?
尝试反序列化输入时出现类似问题。
一个二个一个一个

7bsow1i6

7bsow1i61#

使用旧版本的jni解决了这个问题。

mcdcgff0

mcdcgff02#

使用jni crate的0.21.1版本,可以通过对env.byte_array_from_slice(...)的结果调用.as_raw()来修复第一个示例。
第二个示例可以通过在unsafe块中调用JByteArray::from_raw(buffer.clone())来修复。

相关问题