我可以使用以下代码通过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 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不接受通过引用调用,我怎么能在这里通过引用传递??? 提前谢谢!
答案 0 :(得分:0)
原始数组作为指向内存缓冲区的指针传递。
“地址”语义由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
个实现。如果那些不满足您的需求,您总是可以从基础抽象类派生自己的。