Как реализовать Java типизированный массив на нативном C ++ JNI - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть массив типа класса, определенного в Java.Я пытаюсь использовать этот типизированный массив в нативном C ++ JNI и подготовить из него объект посылки c ++.

Ниже приведена структура моего класса в java:

public class MyIdentifier implements Parcelable {

    private String abc;
    private String def;

    public MyIdentifier(String abc, String def) {
        this(abc, def);
    }
}

и это функция javaЯ хочу вызвать из C ++

 public int setident(List<MyIdentifier> ident) throws RemoteException {
                Parcel _data = Parcel.obtain();
                Parcel _reply = Parcel.obtain();
                try {
                    _data.writeInterfaceToken(Stub.DESCRIPTOR);
                    _data.writeTypedList(ident);
                    this.mRemote.transact(169, _data, _reply, 0);
                    _reply.readException();
                    return _reply.readInt();
                } finally {
                    _reply.recycle();
                    _data.recycle();
                }
            }

1 Ответ

0 голосов
/ 25 сентября 2019

Самый простой способ - вызвать Arrays.asList(javaList) из C ++.Здесь я предполагаю, что у вас есть array_of_MyIdentifier как jobject:

jobject array_of_MyIdentifier = ...;
jclass Arrays = env->FindClass("java/util/Arrays");
jmethodID Arrays_asList = env->GetStaticMethodID(Arrays, "asList", "([Ljava/lang/Object;)Ljava/util/List;");
jobject arrayList = env->CallStaticObjectMethod(Arrays, Arrays_asList, array_of_MyIdentifier);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...