ฉันส่งสตริง URL จากโค้ด Java เป็น C เป็นjstringประเภทข้อมูลผ่านการใช้ JNI และวิธีการไลบรารีของฉันต้องการchar *as url
ฉันจะแปลงjstringในchar *?
PS: มีข้อดีของการใช้ jcharArray ใน C หรือไม่? (เช่นการส่งผ่านchar []แทนสตริงในวิธีดั้งเดิม)
ฉันส่งสตริง URL จากโค้ด Java เป็น C เป็นjstringประเภทข้อมูลผ่านการใช้ JNI และวิธีการไลบรารีของฉันต้องการchar *as url
ฉันจะแปลงjstringในchar *?
PS: มีข้อดีของการใช้ jcharArray ใน C หรือไม่? (เช่นการส่งผ่านchar []แทนสตริงในวิธีดั้งเดิม)
คำตอบ:
นี่คือลิงค์ที่มีประโยชน์สองสามอย่างที่ฉันพบเมื่อเริ่มต้นกับ JNI
http://en.wikipedia.org/wiki/Java_Native_Interface
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html
เกี่ยวกับปัญหาของคุณคุณสามารถใช้สิ่งนี้
JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)
{
const char *nativeString = env->GetStringUTFChars(javaString, 0);
// use your string
env->ReleaseStringUTFChars(javaString, nativeString);
}
nativeStringคงที่หรือไม่?
constด้วยเหตุผล การตอบสนองที่ถูกต้องสำหรับปัญหาของคุณคือstrcpyจากconst char*เป็นไฟล์char*. นั่นควรให้สิ่งที่เปลี่ยนแปลงได้ตามchar*ที่คุณต้องการ
ขอบคุณคำตอบของ Jason Rogers ก่อน
ในAndroid && cppควรเป็นดังนี้:
const char *nativeString = env->GetStringUTFChars(javaString, nullptr);
// use your string
env->ReleaseStringUTFChars(javaString, nativeString);
สามารถแก้ไขข้อผิดพลาดนี้:
1. ข้อผิดพลาด: ตัวถูกดำเนินการพื้นฐานของ "->" มีประเภทที่ไม่ใช่ตัวชี้ "JNIEnv {aka _JNIEnv}"
2. ข้อผิดพลาด: ไม่มีฟังก์ชันที่ตรงกันสำหรับการโทรไปที่ '_JNIEnv :: GetStringUTFChars (JNIEnv * &, _jstring * &, bool)'
3. ข้อผิดพลาด: ไม่มีฟังก์ชั่นที่ตรงกันสำหรับการโทรไปที่ '_JNIEnv :: ReleaseStringUTFChars (JNIEnv * &, _jstring * &, char const * &)'
4. เพิ่ม "env-> DeleteLocalRef (nativeString);" ในตอนท้าย
(*env)->เมื่อคุณใช้ C ไม่ใช่ C ++