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日間立ち往生しています。どんなヒントも素晴らしいでしょう。前もって感謝します。

よろしく、 -Vid-

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 に答える