我正在建立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的原因。

07-26 09:34