ฉันส่งสตริง 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 ++