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