возврат значения

Ответить
yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

возврат значения

Сообщение yura91 » 13 май 2015, 08:56

как из JNI функции вернуть значение не стандартного JNI типа а собственного или библиотечного класса?? как должен выглядеть ретурн и прототип такой функции? можете привести фрагмент кода или дать ссылку

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: возврат значения

Сообщение doter.ua » 13 май 2015, 10:37

json?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: возврат значения

Сообщение yura91 » 13 май 2015, 11:03

нет просто у меня есть библиотека подключена к ndk а там есть класс для хранения изображения и я хочу загрузить изображение в обьект этого класса в функции jni и вернуть этот обьект этого класса ?? Как правильно в этом случае прописать return у jni функции?? Как возвращать нестандартный тип из jni метода?? Можете фрагмент привести?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: возврат значения

Сообщение klblk » 14 май 2015, 08:18

Что значит не стандартный?
Если это 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 его никак вернуть не получится (напрямую).

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: возврат значения

Сообщение yura91 » 16 май 2015, 14:42

а как тогда в Ndk подключить stl классы си++?? я работаю в Android studio. В Application. mk добавил APP_STL := stlport_static и все равно классы stl не видит. Может Ndk переустановить?? как решить проблему??

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: возврат значения

Сообщение klblk » 18 май 2015, 08:02

пробуйте так: APP_STL := gnustl_static

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: возврат значения

Сообщение yura91 » 18 май 2015, 09:43

пробовал бестолку там в Android studio все утилитой ndk-build отлаживается а она походу плохо отлаживает есть явные баги

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: возврат значения

Сообщение klblk » 18 май 2015, 10:35

ndk-build к Android Studio прямого отношения не имеет, можете хоть через командную строку собирать нативную часть.
Не должно быть проблем с lib stl. Если есть какие-то конкретные ошибки при сборке, то их и показывайте, а в домыслах смысла нет.

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: возврат значения

Сообщение yura91 » 18 май 2015, 12:02

при сборке через терминал при помощи утилиты ndk-build она выдает следующую ошибку unknown symbol string при обьявлнении string a в коде, хотя и хедер и пространство имен std подключено. И в Application. mk прописано как вы говорите. В чем же тогда проблема??

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: возврат значения

Сообщение klblk » 19 май 2015, 09:24

Не должно быть такого. Показывайте код.
Для стрингов достаточно "#include <stdlib.h>". Я пространство имен не подключаю, предпочитаю писать "std::string". Пробуйте может в этом дело. Хотя должно быть без разницы.

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: возврат значения

Сообщение yura91 » 19 май 2015, 09:43

а почему #include <stdlib . h> а не # include < string>??
Последний раз редактировалось yura91 19 май 2015, 09:47, всего редактировалось 1 раз.

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: возврат значения

Сообщение yura91 » 19 май 2015, 09:45

ведь в заголовке string находится объявление класса string?? А например vector как тогда подключать туда??

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: возврат значения

Сообщение klblk » 19 май 2015, 10:41

Честно не задумывался почему так. У меня подключена stdlib.h и работаю и std::string, и std::vector, и возможно еще что-то чего я уже не помню.

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: возврат значения

Сообщение yura91 » 12 сен 2015, 12:05

Код: Выделить всё

#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. Подскажите в чем может быть проблема как исправить ситуацию??

Ответить