我正在开发一个使用C ++的应用程序。我正在尝试访问此表达式的内容:
((std::string*) pPin->GetUserData())->c_str();
问题在于我试图通过JNI将此值传递给Java,但在Java中,这会获得一个新值,与原始值无关,我通常可以通过使用它来看到: EXAMPLE_LOG("User Data='%s'", ((std::string*) pPin->GetUserData())->c_str());
我想知道如何获得相同的日志值并将其发送给Java。
感谢您的帮助。
答案 0 :(得分:2)
要从现有的char *或std :: string为java(jstring)创建字符串,请使用NewStringUTF
JNIEnv * env;
jclass loadedJavaClass;
jmethodID loadedJavaMethod;
//assume JVM, class, and method are already loaded at this point.
//Get c string from std::string object pointer
const char * c_string = ((std::string*) pPin->GetUserData())->c_str();
//Create jstring from string
jstring stuff = env->NewStringUTF( c_string );
//pass jstring to Java function
env->CallStaticVoidMethod( loadedJavaClass, loadedJavaMethod, stuff );
//remove local reference to jstring
JavaEnvironment::getEnvironment()->DeleteLocalRef(stuff);