упаковка библиотеки C ++ с использованием Jni

0

Я хочу создать оболочку, которая обертывает библиотеку c++, используя Jni. В принципе, у меня есть сторонняя библиотека, которая может считывать точки (x, y, z) из файла. поэтому путь к файлу должен быть входным параметром. my jni - это что-то вроде

JNIEXPORT void JNICALL to_the_path_loadFile( JNIEnv *env, jobject obj,jstring filePath)

JNIEXPORT jdouble JNICALL to_the_path_getX( JNIEnv *env, jobject obj, jint index)

Первый метод будет загружать файл, второй - координату x.

Поскольку файл имеет большое количество точек, я не могу загрузить их все в память. Моя идея использует итератор для повторения каждой точки и переноса ее на объект Java. Это означает, что я должен getX() называть getX().

Мой вопрос заключается в том, как избежать загрузки потока файлов столько раз? Я новичок в c++, есть ли способ, которым я могу ссылаться на объект c++, поэтому я могу сказать, в какой точке я читаю?

Теги:
jni

2 ответа

0
Лучший ответ

Подобно решению Turix, но без глобальной переменной C++. Have loadFile() возвращает дескриптор файла и передает это getX(). Вы также должны иметь метод closeFile() для закрытия открытого файла после получения всех значений X.

Поскольку у вас есть много значений, вы также можете передать getX() собственный массив удвоений, чтобы он мог получать множество значений за один вызов. Это другой дизайн, но он будет намного более эффективным.

Кроме того, рассмотрите возможность использования SWIG для создания ваших классов-оболочек. Это упрощает создание и управление частью Java.

0

Да, есть несколько способов сделать это, но, вероятно, самым простым является сохранение глобальной переменной для файла в коде C++, который инициализируется вашим loadFile() и на который ссылаются ваши getX().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню