JNI преобразовать строку в массив символов - PullRequest
5 голосов
/ 07 февраля 2012

Не знаком с c ++, может кто-нибудь помочь мне добавить cmd в массив myStr и передать его в функцию main(), вот что у меня есть:

JNIEXPORT void JNICALL Java_my_package_JNIActivity_callCmdLine(
    JNIEnv *env, jobject obj, jstring cmd)
{
    const char *nativeString = env->GetStringUTFChars(cmd, 0);
    env->ReleaseStringUTFChars(cmd, nativeString);

    char * myStr [] = {"v", nativeString};

    //int main(int argc, char *argv[])
    main(1, myStr); 
}

Ответы [ 2 ]

7 голосов
/ 07 февраля 2012

Ну, не отпускайте его, пока не закончите.

char * nativeString;

{    const char * _nativeString = env->GetStringUTFChars(cmd, 0);
     nativeString = strdup (_nativeString);
     env->ReleaseStringUTFChars(cmd, _nativeString);
}

char * myStr [] = {"v", nativeString};
main(1, myStr); 

free (nativeString);
3 голосов
/ 31 июля 2014

Почему бы не воспользоваться объектами для гарантии удаления выполняется автоматически ...?

class ConvertStringHelper
{
public:
    ConvertStringHelper( JNIEnv *env, jstring value )
    {
        m_str = env->GetStringUTFChars(value, 0);
        m_value = &value;
        m_env = env;
    }
    ~ConvertStringHelper()
    {
        m_env->ReleaseStringUTFChars( *m_value, m_str);
    }

    jstring* m_value;
    const char *m_str;
    JNIEnv *m_env;
};

Тогда:

    ConvertStringHelper helper( env, cmd );
    const char* nativeStr = helper.m_str;
    // nativeStr is valid in helper's scope and memory will be cleanly released when exiting the scope!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...