2012-12-10 8 views
17

यह जेएनआई कोड है।जेएनआई प्रोग्राम में जेस्ट्रिंग रिटर्न

जावा कोड: stringMethod समारोह के लिए

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);  
    } 
} 

सीपीपी विधि:

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;  
} 

मेरी जावा कोड चल रहा है। मुझे नीचे परिणाम मिला।

stringMethod: world 

लेकिन मैंने स्ट्रिंग "दुनिया" को "हैलो" के साथ जोड़ा। मैं यहां संलग्न स्ट्रिंग भी लौट रहा हूं। लेकिन मुझे केवल "दुनिया" क्यों नहीं मिल रहा है "हैलो वर्ल्ड"। वास्तव में मैं इस कोड के साथ उलझन में हूँ। परिशिष्ट स्ट्रिंग के साथ परिणाम प्राप्त करने के लिए मुझे क्या करना चाहिए?

+1

समस्या, कहीं और है अपने संयोजन पूरी तरह से वैध है: http://codepad.org/WWR4LzfV –

उत्तर

9

इस तरह से यह करने के लिए होना चाहिए ....

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

ठीक है, फर्क सिर्फ इतना है कि मैं अपने कोड के बीच देखें और लेखक का कोड यह है कि वह जेएनआई के लिए सी ++ सिंटैक्स का उपयोग कर रहा है और आप जेएनआई के लिए सी सिंटैक्स ... – Gugelhupf

+2

'(* env) -> न्यूस्ट्रिंगटएफ (...) 'env-> NewStringUTF (। ..) '? – nn0p

+3

@ nn0p सी में 'env' फ़ंक्शंस का उपयोग करते समय, कथन' (* env) -> फ़ंक्शन (env, पैरामीटर) 'है। हालांकि सी ++ में, यह बदल जाता है: 'env-> फ़ंक्शन (पैरामीटर)'। – agastalver

संबंधित मुद्दे