1 // Purpose. Java calling C 2 // (Java passes String in, C returns String) 3 ////////////////////////////// JNIdemos.java \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 4 class JNIdemos { 5 public native static String toUpper( String in ); 6 static { 7 System.loadLibrary( "JNIdemos" ); 8 } 9 public static void main( String[] args ) { 10 System.out.println( "upper is " + toUpper( args[0] ) ); 11 } 12 } 13 ////////////////////////////// JNIdemos.cpp \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 14 #include 15 #include 16 #include "JNIdemos.h" 17 extern "C" { 18 JNIEXPORT jstring JNICALL Java_JNIdemos_toUpper( 19 JNIEnv* env, jclass, jstring in ) { 20 const char* inToChar = env->GetStringUTFChars( in, 0 ); 21 char* buf = new char[strlen(inToChar) + 1]; 22 jstring ret; 23 cout << "input is " << inToChar << endl; 24 for (int i=0; i < strlen(inToChar); i++) 25 buf[i] = (inToChar[i] > 96 && inToChar[i] < 123) ? 26 inToChar[i]-32 : inToChar[i]; 27 ret = env->NewStringUTF( buf ); 28 env->ReleaseStringUTFChars( in, inToChar ); 29 delete buf; 30 return ret; 31 } 32 } 33 // C:> java JNIdemos "Here is CamelCase, with punctuation." 34 // input is Here is CamelCase, with punctuation. 35 // upper is HERE IS CAMELCASE, WITH PUNCTUATION.