c调用java函数返回值_java - 如何从C函数返回值给Java调用程序? - 堆栈内存溢出...

本文探讨如何在C函数中调用Java方法并返回数据。通过使用JNI,作者遇到的问题是如何将C函数获取的数据(以void *pValue形式)转换为Java字节数组(jbyteArray)。解决方案涉及在C代码中调用getInfo函数,然后将返回值适当地转换回Java字节数组并释放资源。
摘要由CSDN通过智能技术生成

我有一个C函数,如下所示:

int getInfo(int index, int type, void *pValue, int valueLen);

pValue是用于保存信息值的缓冲区的地址。 但是,缓冲区必须事先由调用方分配。

因为我相当确定我正在处理小数据,所以我在Java托管代码中执行以下操作...

public native int callGetInfo(int index, int type, byte[] value);

...然后传递一个固定大小的字节数组,如下所示:

byte[] buf = new byte[1024];

callGetInfo(idx, t, buf);

原因是因为我读到小数据,在性能方面,使用字节数组比ByteBuffer更好。

我自动生成的JNI标头如下:

JNIEXPORT jint JNICALL Java_com_testing_jni_Tester_callGetInfo (JNIEnv *, jobject, jint, jint, jbyteArray);

到目前为止,这是我的桥接函数内部的功能:

JNIEXPORT jint JNICALL Java_com_testing_jni_Tester_callGetInfo (JNIEnv *env, jobject obj, jint index, jint type, jbyteArray array)

{

jboolean isCopy;

jbyte* bufferPtr = (*env)->GetByteArrayElements(env, array, &isCopy);

// here I need to call the getInfo(index, type, pValue, valueLen) function, and then convert the pValue into a jbyteArray and return it using array

if(isCopy) {

(*env)->ReleaseByteArrayElements(env, array, bufferPtr, 0);

}

return 0;

}

在我的桥接函数中,我想将我从getInfo函数获得的pValue的值(无论是pValue类型)转换为jbyteArray以便可以将其返回给Java调用者。 我该如何实现?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值