Страница 1 из 1
возврат значения
Добавлено: 13 май 2015, 08:56
yura91
как из JNI функции вернуть значение не стандартного JNI типа а собственного или библиотечного класса?? как должен выглядеть ретурн и прототип такой функции? можете привести фрагмент кода или дать ссылку
Re: возврат значения
Добавлено: 13 май 2015, 10:37
doter.ua
json?
Re: возврат значения
Добавлено: 13 май 2015, 11:03
yura91
нет просто у меня есть библиотека подключена к ndk а там есть класс для хранения изображения и я хочу загрузить изображение в обьект этого класса в функции jni и вернуть этот обьект этого класса ?? Как правильно в этом случае прописать return у jni функции?? Как возвращать нестандартный тип из jni метода?? Можете фрагмент привести?
Re: возврат значения
Добавлено: 14 май 2015, 08:18
klblk
Что значит не стандартный?
Если это Java объект то возвращайте jobject:
с++:
[syntax=cpp]jobject
Java_com_example_hellojni_HelloJni_ObjFromJNI( JNIEnv* env, jobject thiz, jobject myObj)
{
//действия над myObj
return myObj;
}[/syntax]
java:
[syntax=java5]public native MyObj ObjFromJNI(MyObj myObj);[/syntax]
Если это C++ объект, то в Java его никак вернуть не получится (напрямую).
Re: возврат значения
Добавлено: 16 май 2015, 14:42
yura91
а как тогда в Ndk подключить stl классы си++?? я работаю в Android studio. В Application. mk добавил APP_STL := stlport_static и все равно классы stl не видит. Может Ndk переустановить?? как решить проблему??
Re: возврат значения
Добавлено: 18 май 2015, 08:02
klblk
пробуйте так: APP_STL := gnustl_static
Re: возврат значения
Добавлено: 18 май 2015, 09:43
yura91
пробовал бестолку там в Android studio все утилитой ndk-build отлаживается а она походу плохо отлаживает есть явные баги
Re: возврат значения
Добавлено: 18 май 2015, 10:35
klblk
ndk-build к Android Studio прямого отношения не имеет, можете хоть через командную строку собирать нативную часть.
Не должно быть проблем с lib stl. Если есть какие-то конкретные ошибки при сборке, то их и показывайте, а в домыслах смысла нет.
Re: возврат значения
Добавлено: 18 май 2015, 12:02
yura91
при сборке через терминал при помощи утилиты ndk-build она выдает следующую ошибку unknown symbol string при обьявлнении string a в коде, хотя и хедер и пространство имен std подключено. И в Application. mk прописано как вы говорите. В чем же тогда проблема??
Re: возврат значения
Добавлено: 19 май 2015, 09:24
klblk
Не должно быть такого. Показывайте код.
Для стрингов достаточно "#include <stdlib.h>". Я пространство имен не подключаю, предпочитаю писать "std::string". Пробуйте может в этом дело. Хотя должно быть без разницы.
Re: возврат значения
Добавлено: 19 май 2015, 09:43
yura91
а почему #include <stdlib . h> а не # include < string>??
Re: возврат значения
Добавлено: 19 май 2015, 09:45
yura91
ведь в заголовке string находится объявление класса string?? А например vector как тогда подключать туда??
Re: возврат значения
Добавлено: 19 май 2015, 10:41
klblk
Честно не задумывался почему так. У меня подключена stdlib.h и работаю и std::string, и std::vector, и возможно еще что-то чего я уже не помню.
Re: возврат значения
Добавлено: 12 сен 2015, 12:05
yura91
Код: Выделить всё
#include <jni.h>
#include "com_example_testir_MainActivity.h"
#include <string.h>
#include <string>
#include <iostream>
#include <vector>
#include <stdlib.h>
JNIEXPORT jstring JNICALL Java_com_example_testir_MainActivity_get_1text_1from_1cpp
(JNIEnv * env, jobject obj)
{
std::string a; здесь ошибка
std::vector<string> vec; здесь ошибка
return env->NewStringUTF( "hello from C++" );
}
Application.mk
Код: Выделить всё
APP_ABI := armeabi armeabi-v7a
APP_STL := stlport_static
этот код я пишу в эклипс в папке jni. В итоге все хедеры(include) подключены нормально.Но ошибку выдает при использовании классов vector и string. Подскажите в чем может быть проблема как исправить ситуацию??