Void * пример для JNA - PullRequest
       4

Void * пример для JNA

1 голос
/ 25 июня 2010

Я изо всех сил пытался найти примеры на примере void * в JNA. Я пытаюсь понять, как использовать указатель в JNA.

Например

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.

Как мы пишем это в 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-

Ответы [ 2 ]

2 голосов
/ 06 мая 2011

Объявите ваш метод, чтобы принять IntByReference в качестве аргумента, тогда вам не нужно вызывать ByReference.getPoint () при вызове метода.

1 голос
/ 27 июня 2010

Мне кажется, я понял это.

Вот как я написал это на 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);
 }
...