string jstring、const char*、std::string間の変換

1114 ワード

JAva jni c++作業中によく使われるものをまとめます
フィールドの取得
env->getFieldID(class,“name”,fieldタイプ);
methodの取得
env->getMethodID(class、メソッド名、(パラメータ)戻りタイプ);
ここではタイプの問題が必要です
基本データ型
特殊なstring object arraylistも3つあります
string---Ljava/lang/String
object---Ljava/lang/Object
array---Ljava/util/ArrayList
戻り値がない場合はVを使用します.戻り値が定義したタイプである場合、戻りタイプはLパッケージ名+クラス名であり、パッケージ名の間に「.」「/」に置き換える
作業中に問題が発生しました
jstring---string--std::string---const char
jfield id = env->getFieldId();このidはstringです
このフィールドを手に入れたいobjectがあります
jobject string = env->callObjectField(obj,id)
強転:jstring newString=(jstring)string;
これなら簡単
私がよく使う3つの変換方法を紹介します
jstring string = env->newStringUTF(const char *);
std::string string = const char *str;
const char* str = env->GetStringUTFChars(jstring,0);
上記の3つの式は互いに変換することができます
ここで注意すべき問題がありますlocal reference table overflow(max=512)
このブログを見て紹介できますhttps://blog.csdn.net/xyang81/article/details/44873769
env->DeleteLocalRef(startdes);
これは問題を解決することができます