JNA的Void *示例

时间:2010-06-25 10:17:37

标签: java jna

我一直在努力在JNA中查找void *示例中的示例。我试图了解如何在JNA中使用Pointer。

例如

IN 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.

我们如何使用JNA在JAVA中编写它? 我在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);
 }

调用myLib.PTOsetApiOpt时,JVM崩溃了。我猜这是因为新的Pointer声明。如何在没有JVM崩溃的情况下创建指针并将其用作参数?我被困在它身上2天了。任何提示都会很棒。提前谢谢。

此致 -vid -

2 个答案:

答案 0 :(得分:2)

声明你的方法将IntByReference作为参数,然后在调用方法时不必调用ByReference.getPoint()。

答案 1 :(得分:1)

我想我已经明白了。

以下是我用Java编写的方式..

void * 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);
 }