/**** Callbacks.c ********************************************
**
** This example show how to involke Java methods from the C
** environment.
**
** This shared library does not requires the SIOUX console environment
** to be linked in as printing is done by way of a callback into the
** Java environment. This shared libary is about 1 Kbytes.
**
** NB: Linking will produce over 100 warning messages.
**
**
** Will Gilbert, Informagen, Inc., 1999
** Gilbert@Informagen.com
*/
#include <jni.h>
#pragma export on
#include "Callbacks.h"
#pragma export reset
JNIEXPORT void JNICALL Java_Callbacks_nativeMethod(JNIEnv* env, jobject obj, jint depth) {
// Resolve the involking instance object
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID callbackMID = (*env)->GetMethodID(env, cls, "callback", "(I)V");
jmethodID printMID = (*env)->GetMethodID(env, cls, "print", "(Ljava/lang/String;ILjava/lang/String;)V");
char* from = "C";
char* to = ", about to enter Java";
jstring fromString = NULL;
jstring toString = NULL;
//
if ( printMID == 0 )
return;
if ( callbackMID == 0 )
return;
fromString = (*env)->NewStringUTF(env, from);
toString = (*env)->NewStringUTF(env, to);
(*env)->CallVoidMethod(env, obj, printMID, fromString, depth, toString );
(*env)->CallVoidMethod(env, obj, callbackMID, depth);
}