通过JNA调用dll函数,如何处理java中通过指针传递的地址?

Calling dll functions, through JNA, How to handle address passing through pointers in java?

我能够通过 C++ 调用 dll 函数,使用这些代码:

 extern "C" 
    {
    __declspec(dllimport) void _stdcall INPWAV
                 (char* Rad, int radLen,
                  float* wavlen);
    }
    .
    .
char rad[4];
float   Wavlen; 
    .
    .
        INPWAV(rad,4,&m_Wavlen);
    .
    .

但我想通过 JNA 从 java 调用它,我想知道,我如何处理地址传递,就像我在 C++ 中传递指针一样,因为 java 中没有指针,并且java 不支持像 C++ 这样的引用调用?? 目前在 java 中尝试为:

public class CallDll {
    public interface callNative extends Library {
        public void INPWAV(char Rad, int radLen,float wavlen);
    }
    public static void main(String[] args) {
        callNative callNative1 = (callNative)Native.loadLibrary("PROCESSWAV", callNative.class);
          char rad[] = new char[4];
        float   Wavlen; 
        .
        .
        callNative1.INPWAV(rad,4,Wavlen);
    }
}

但是出现错误....因为 java 不接受引用调用,我怎样才能在这里通过引用传递??? 提前谢谢!

原始数组作为指向内存缓冲区的指针传递。

"Address of" 语义由 com.sun.jna.ptr.ByReference classes, which include FloatByReference 提供(如果需要,它支持内存初始化)。

FloatByReference fref = new FloatByReference(5.0);
// Equivalent to passing &float_value
lib.callMyMethod(fref);
float value = fref.getValue();

编辑

ByReference 所有基本类型和通用指针都存在实现。如果这些不能满足您的需求,您总是可以从基本摘要中派生出您自己的 class。