如何访问c.str()内容?

时间:2014-01-10 18:39:38

标签: java c++ java-native-interface

我正在开发一个使用C ++的应用程序。我正在尝试访问此表达式的内容:

((std::string*) pPin->GetUserData())->c_str();

问题在于我试图通过JNI将此值传递给Java,但在Java中,这会获得一个新值,与原始值无关,我通常可以通过使用它来看到: EXAMPLE_LOG("User Data='%s'", ((std::string*) pPin->GetUserData())->c_str());

我想知道如何获得相同的日志值并将其发送给Java。

感谢您的帮助。

1 个答案:

答案 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);