1

問題が 1 つあります。Javaには次のようなクラスがあります

public class s_k {
    public byte[][] s;
    public int r;
}

Cでは対応する構造体、

typedef struct {
  unsigned char s[10][10];
  int r;
} s_k;

Javaがこれをs_kのパラメータータイプとして渡す1つの関数があります。Cコードで取得して変更する方法

4

1 に答える 1

2

Java クラスの構造反映を作成しても意味がありません。これは Java クラスのコピーになります。つまり、変更しても元の Java オブジェクトは変更されません。変更を元のオブジェクトに反映させたいと思いますよね?

したがって、単純にs_kインスタンスを渡してjobject、JNI の機能を使用して直接アクセスします。

  • rGetFieldIDそしてSetIntField
  • sをもう一度GetFieldID、次にGetObjectField(配列は Java のオブジェクトです)、次にGetByteArrayElements

JNAに飛び込みたい場合を除き、これ以上簡単な方法はありません。

更新:あなたの質問の重複があるようです:

JNIでオブジェクト内の配列にアクセスするには?

于 2012-10-16T17:37:54.170 に答える