1

我一直在努力寻找有关 JNA 中 void* 示例的示例。我试图了解如何在 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.

我们如何使用 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天。任何提示都会很棒。提前致谢。

问候,-视频-

4

2 回答 2

2

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

于 2011-05-06T13:02:39.313 回答
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);
 }
于 2010-06-27T00:47:52.297 回答