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

标签 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。

感谢您的帮助。

最佳答案

要从现有的 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);

关于java - 如何访问 c.str() 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051913/

相关文章:

java - 访问私有(private)字段

c# - 网络、混合还是原生?第一个目标 : student timetables, 下一个:学校想要的任何其他东西

Java Eclipse : ComboBox action button based on item selected (e. g.,温度转换)

c++ - 哪个 vector 和 map 使用更少的内存(大量数据和未知大小)

Java 如何禁用 JTable 单击时可编辑

c++ - 初始化类的常量字符指针

c++ - 'std' 以外的 C++ 中有用的命名空间

java - 使用 JNI Java 类的 DLL

java - 获取有效的 JNIEnv 指针

java - 内存是否分配给了 switch block 中的所有字符串?