У меня есть функция в Java, какЧто вызывать метод, который возвращает char * (String в Java и char * в C++)?
public boolean getIsIn();
public String getName();
в C++ У меня есть обертку функции, такие как
bool gPGIsIn(){
JNIEnv* env = s3eEdkJNIGetEnv();
return (bool)env->CallBooleanMethod(g_Obj, g_s3eGPGIsIn);
}
char* gPGGetName(){
JNIEnv* env = s3eEdkJNIGetEnv();
// below is a problem, what to call
//return (char*)env->CallWahtMethod(g_Obj, g_s3eGPGGetName);
}
где
static jmethodID g_s3eGPGIsIn = env->GetMethodID(cls, "getIsIn", "()Z");
static jmethodID g_s3eGPGGetName = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
Что называть в соответствии с тегами, как проблемы внутри gPGGetName для вызова метода который возвращает char * (String в Java и char * в C++)?
Я ничего о NDK не знаю, но не есть способ, чтобы получить ' std :: string' из этого? Потому что это стандартный тип строки C++. – yzt
Вам нужно дополнительно определить «что» перед «как». Я предполагаю, что 'gPGGetName' - вернуть указатель на первый элемент массива. Какой набор символов и кодирование следует использовать? Должен ли массив каким-то образом прекратиться? Что делать, если кодирование создает то, что похоже на терминатор в середине строки? Как должен распределяться массив и кто должен его освобождать? Если набор символов не поддерживает все символы Юникода в строке, должны ли поддерживаемые символы заменяться символом замещения или быть пропущены или если функция не сработает? –
Назовите все, что вам нравится, это имеет смысл для вас. Не настоящий вопрос. – EJP