我正在建立DLL库的接口,因此可以将其与Java一起使用。
我需要本机函数来修改jlong参数的值。就像参数是通过引用传递的。
我的Java方法必须具有与此处显示的本机函数MPUSBWrite完全相同的参数。
实际无法正常工作的代码示例:
MPUSBWrite以其第4个参数作为参考并修改itrs值。
当我读取pLength传递的变量时,我总是得到0。
Java:
public static native boolean Write(long handle, byte[] pData, int dwLen, long pLength, int dwMilliseconds);
本机C++:
JNIEXPORT jboolean JNICALL Java_jPicUsb_iface_Write
(JNIEnv *env, jclass jc, jlong handle, jbyteArray pData, jint dwLen, jlong pLength, jint dwMilliseconds) {
jniByteArray b(env, pData);
DWORD res = MPUSBWrite((HANDLE)handle,b.getBytes(),dwLen,(PDWORD)pLength,dwMilliseconds);
if (res) {
return JNI_TRUE;
} else {
return JNI_FALSE;
}
}
我的C++代码有没有办法通过引用修改pLength变量的值?
最佳答案
没有。
如果确实需要这样做,最好的选择是将第四个参数定义为long [],并让JNI代码更新数组元素。
实际上,最好的选择是考虑为什么不能从该方法返回long的原因。