#include "CORBAwrapper.h" #include #include #include JNIEXPORT void JNICALL Java_CORBAwrapper_printmessage (JNIEnv *env, jobject obj) { printf("This is the C library for SRB CORBA example\n"); printf("Now you are using a C API from Java\n"); } JNIEXPORT jstring JNICALL Java_CORBAwrapper_Sls__Ljava_lang_String_2 (JNIEnv *env, jobject obj, jstring collection) { char buf[128]; /*Extracting information from the parameter */ const char *str = (*env)->GetStringUTFChars(env, collection, 0); printf("This is the string that I got from Java\n"); printf("%s\n", str); /*Releasing the Java String once you have got the C string is very important!!!*/ (*env)->ReleaseStringUTFChars(env, collection, str); /*Creating the returning string*/ printf("Sending bye bye\n"); strcpy(buf,"bye bye "); strcat(buf,str); return (*env)->NewStringUTF(env, buf); } JNIEXPORT jstring JNICALL Java_CORBAwrapper_Sls__ (JNIEnv *env, jobject obj) { jstring mystring; mystring = (*env)->NewStringUTF(env,"Hi"); return(mystring); } JNIEXPORT jboolean JNICALL Java_CORBAwrapper_testboolean (JNIEnv *env, jobject obj, jboolean myboolean) { printf("This is what C gets from Java"); if (myboolean) { printf("TRUE"); } else { printf("FALSE"); } return(1==0); } JNIEXPORT jint JNICALL Java_CORBAwrapper_testinteger (JNIEnv *env, jobject obj, jint myinteger) { jint result = 30; printf("This is what C gets from Java"); printf("%d",myinteger); printf("\n"); printf("Adding %d", result); result = result + myinteger; return(result); } JNIEXPORT jint JNICALL Java_CORBAwrapper_testarrayint (JNIEnv *env, jobject obj, jintArray myarray) { int i,sum = 0; jsize len; jint *body; printf("What C gets from java is:\n"); /*First we get the length of the array*/ len = (*env)->GetArrayLength(env, myarray); printf("The length of the array is: %d%\n", len); body = (*env)->GetIntArrayElements(env, myarray, 0); for (i=0; iReleaseIntArrayElements(env, myarray, body, 0); return(sum); } JNIEXPORT jobjectArray JNICALL Java_CORBAwrapper_testarrayStrings (JNIEnv *env, jobject obj, jobjectArray myarray) { int i; jsize len; jobject myobj; const char *str; jstring mystring; printf("This is what C gets from Java\n"); len = (*env)->GetArrayLength(env, myarray); printf("The length of the array is : %d%\n", len); printf("Elements in the array:\n"); for(i =0;iGetObjectArrayElement(env, myarray,i); str = (*env)->GetStringUTFChars(env, myobj, 0); printf(str); printf("\n"); } /*Modifying the array we return*/ printf("Modifying the array we return\n"); mystring = (*env)->NewStringUTF(env, "Gerard Rodriguez"); (*env)->SetObjectArrayElement(env,myarray,1,mystring); return(myarray); } JNIEXPORT void JNICALL Java_CORBAwrapper_testreferences (JNIEnv *env, jobject obj) { jclass cls; jfieldID fid; jint myint; printf("Accessing myvalue directly from C\n"); cls = (*env)->GetObjectClass(env,obj); fid = (*env)->GetStaticFieldID(env,cls,"myvalue","I"); if (fid == 0) { printf("Error accessing myvalue"); return; } myint =(*env)->GetStaticIntField(env,cls,fid); printf("the value is %d%\n", myint); printf("Now we change the value from C\n"); (*env)->SetStaticIntField(env, cls, fid, 200); return; }