2010-06-25 56 views
1

我一直在努力尋找JNA中void *示例的示例。我想了解如何在JNA中使用指針。無效* JNA的示例

例如

在C:

int PTOsetApiOpt(int iOpt,void* lpValue,int iLen) 

Parameters: iOpt: int 
lpData: address from which data should be read. 
iLen: length of data 
returns int values : 0 as success or -1 as failure. 

我們如何寫在Java中使用JNA? 我在JAVA

public MyTest{ 

public interface MyLibrary extends Library { 
    public int PTOsetApiOpt(int iOpt,Pointer lpValue,int iLen); 

} 
public static void main(String[] args) { 
    MyLibrary myLib = (MyLibrary)MyLibrary.INSTANCE; 
    int result = myLib.PTOsetApiOpt(1,new Pointer(0),1024); 
} 

試過這個,我得到JVM崩潰被調用時myLib.PTOsetApiOpt。我猜這是因爲新的Pointer語句。我如何創建一個指針並將其用作參數而沒有JVM崩潰?我一直堅持了2天。任何提示都會很棒。提前致謝。

問候, -Vid-

回答

1

我想我已經想通了。

以下是我寫在Java中..

無效* lpValue可以是任何類型。所以在C中,期望int值的地址。

public MyTest{ 

public interface MyLibrary extends Library { 
    public int PTOsetApiOpt(int iOpt,Pointer lpValue,int iLen); 

} 
public static void main(String[] args) { 
    MyLibrary myLib = (MyLibrary)MyLibrary.INSTANCE; 
    IntByReference ir = new IntByReference(1); 
    //got a result as 0 instead of -1. 
    int result = myLib.PTOsetApiOpt(1, ir.getPointer() , ir.getPointer().SIZE); 
} 
2

聲明你的方法採取IntByReference作爲參數,那麼你不必調用方法時調用ByReference.getPoint()。