0

ダブルポインターを取得する関数があります

int getList(unsigned char **list); //it returns a list of something

ネイティブ コード (JNI) から自分の関数に double ポインターを渡す方法を知りたいです。誰?

これは私が試したものですが、うまくいきません。

jint Java_test_test_Activity_getList(JNIEnv *env, jobject this, jobjectArray list, jint size){
   jint count=0;
   jbyteArray bArray;
   jByteArray cList;
   count=(*env)->GetArrayLength(env, list);
    for(int i=0; i<count; i++){
       bArray[i]=(*env)->GetObjectArrayElement(env, list, i);
       (*env)->GetByteArrayRegion(env, bArray[i], 0, size, cList[i]);
     }

    return  getList(cList);
}
4

2 に答える 2

0

「&」演算子を使用して jByteArray のアドレスを取得できませんか?

return  getList(&cList);

C/C++ の '&' は、変数 (ポインター) のアドレスを示します。ポインターで使用して、ダブルポインターを取得できます。しかし、jByteArray と unsigned char* の間のキャストがそれほど単純かどうかはわかりません。他に何かする必要があるかもしれません。

于 2012-12-14T15:48:55.037 に答える
0

二重ポインタは、通常、それほど大したことではありません。3 つのレイヤーすべてを念頭に置く必要があります。

  1. 変数の値に直接アクセスできるレイヤー。(例: int a; a = 3;)
  2. このレイヤーは、以前に定義した変数へのポインターを保持します。(例: int *p = &a;)
  3. 最後のレイヤーは、ポインターが別のポインターを指す場所です。(例: int *p2 = &p)

レベル 3 にいて、ポインタ p2 を使用しているとします。

  1. *p2 はポインタ p を与えます。
  2. ここで、a を取得するために p を逆参照するだけでよいので、*p は a の値を返します。

したがって、何かの二重ポインターを保持するには、最下層のポインターを返す必要があります。(例: (&(&a)))

そして、前述のように、値を取得するには、2 回逆参照する必要があります。(例 *(*ptr) )

jobjectArray 要素を jByteArray 要素に格納しようとしているのはなぜですか?

bArray[i]=(*env)->GetObjectArrayElement(env, list, i);

さらに、jByteArray cList の代わりに C/C++ の同等物を直接使用することもできますが、これはおそらくエラーの修正には関係ありません。

于 2012-12-15T01:18:31.040 に答える