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

问题描述:

荫能够通过C++来调用的DLL函数,使用这些代码:通过JNA调用dll函数,如何处理在java中通过指针的地址?

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 dones不支持像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不接受引用调用,我怎么能可以通过参考路过这里??? 谢谢提前!

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

“语义地址”由com.sun.jna.ptr.ByReference类提供,其中包括FloatByReference(如果需要,支持存储器的初始化)。

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

编辑

ByReference实现所有基本类型和通用指针存在的。如果这些不能满足您的需求,您可以始终从基本抽象类中派生自己的派生类。

+0

谢谢,会试试这个,但是我们有这个整数,字符数组吗? –