2012-12-10 23 views
17

Bu, JNI kodudur.JNI programında jstring dönüşü

Java kodu:

public class Sample1 { 

    public native String stringMethod(String text); 

    public static void main(String[] args) 
    { 
     System.loadLibrary("Sample1"); 
     Sample1 sample = new Sample1(); 

     String text = sample.stringMethod("world"); 

     System.out.println("stringMethod: " + text);  
    } 
} 

CPP Yöntem stringMethod fonksiyonu için:

JNIEXPORT jstring JNICALL Java_Sample1_stringMethod 
    (JNIEnv *env, jobject obj, jstring string) { 

const char *name = env->GetStringUTFChars(string, NULL);//Java String to C Style string 
char msg[60] = "Hello "; 
jstring result; 

strcat(msg, name); 
env->ReleaseStringUTFChars(string, name); 
puts(msg); 
result = env->NewStringUTF(msg); // C style string to Java String 
return result;  
} 

benim java kodunu çalışan. Aşağıdaki sonucu aldım.

stringMethod: world 

Ancak "Merhaba" ile "dünya" dizesini ekledim. Ayrıca buraya eklenen dizeye de dönüyorum. Ama neden sadece "dünya" değil "Merhaba Dünya" alıyorum. Bu kodla gerçekten karıştırdım. Sonucu eklenen dizeyle elde etmek için ne yapmalıyım?

+1

Bunu yapmanın yolu olmalıdır: http://codepad.org/WWR4LzfV –

cevap

9

bu sorun birleştirme tamamen geçerli olduğunu, başka yerde olduğunu ....

JNIEXPORT jstring JNICALL Java_Sample1_stringMethod 
    (JNIEnv *env, jobject obj, jstring string) { 

const char *name = (*env).GetStringUTFChars(env,string, NULL); 
char msg[60] = "Hello "; 
jstring result; 

strcat(msg, name); 
(*env).ReleaseStringUTFChars(env,string, name); 
puts(msg);    
result = (*env).NewStringUTF(env,msg); 
return result;   
} 
+1

Eh, tek fark ben kodunuz ve yazarın kodu arasında, JNI için C++ sözdizimi kullanmanız ve JNI ... – Gugelhupf

+2

için sözdizimi olması gerekir. (* env) -> NewStringUTF (...) 'be' env-> NewStringUTF (. ..) '? – nn0p

+3

@ nn0p c'deki 'env' işlevlerini kullanırken, ifade' (* env) -> İşlev (env, parameters) 'dır. Ancak C++ 'da, bu şu şekildedir: 'env-> İşlev (parametreler). – agastalver