2

JNI のポインターへのポインターに関する質問があります。

Cで次の関数がある場合:

void myfunction(int **pp);

int **ppJavaでの参照を取得するにはどうすればよいですか? また、参照を変更するために参照を JNI 関数に渡すにはどうすればよいですか?

解決に導くことができますか?単純なポインターは操作できますが、ポインターへのポインターは操作できません。

4

2 に答える 2

4

JNI に相当するものは、代わりにメソッドの最初の引数を long プリミティブ配列に置き換えます。

int alloc_opaque_type(T** pp);

public static native int alloc_opaque_type(long[] pp);
于 2013-06-04T13:50:22.217 に答える
1

Java では、Java オブジェクトを変更するためのポインターとして取得することはできません。また、Java オブジェクトを C 構造体または C++ オブジェクトに直接変換することもできません。ただし、Java オブジェクトを としてjobject取得し、そのプリミティブ値 (文字列からの int や char など) を手動で取得し、それらの値を使用して C コードで必要なものを構築できます。、などにキャストできますが、jintまたは配列にはキャストできません。intjdoubledoublejobjectstruct

ポインターを取得して Java に ( としてint) 渡した場合は、それintを C に (JNI 経由で)int戻し、ポインターに変換することができます。

于 2013-06-07T22:26:49.087 に答える