JNAからこのメソッドシグネチャを持つメソッドをC言語で呼び出すにはどうすればよいですか? C法のJavaで新しいポインタを取得するには?
int open_device(context *ctx, device **dev, int index);
最後の2行のようになります。
*dev = pdev;
return 0;
その方法でdev
の使用のみです。これは、メソッドの空のポインタにpoinerを渡す必要があることを意味します。この方法では、空のポインタをdevice
オブジェクトのアドレスで埋めるので、ポインタを他のメソッドに渡すことができます。
私の質問です:これは正しい方法ですか?そうであれば、どうすればJavaから新しいポインタを割り当てることができますか?
受け入れ答えに基づいて、私はこれをしなかった:
のJavaにはポインタ、参照のみはありませんMemory p = new Memory(Pointer.SIZE);
Memory p2 = new Memory(Pointer.SIZE);
p.setPointer(0, p2);
nativeLib.open_device(ctx, p, index);
return p2;
興味があるだけ:あなたのために更新されたコードの仕事をしましたか? '* p = p2'を設定しているように見えますが、C関数は' * p = pdev'を実行して値を上書きします。 – casablanca
@casablanca:はい、私はそれをテストしました、それは動作します。 – thejh
@thejh無効なメモリアドレスが指し示されているために作成されたinvalidMemoryAccess Exceptionを処理する方法を知っていますか? – mayooran