#include "jni.h" void println_java(JNIEnv *env, const char *msg); extern "C" jint JNI_OnLoad(JavaVM *jvm, void *) { JNIEnv *env = nullptr; jvm->GetEnv((void **)&env, JNI_VERSION_1_6); println_java(env, "Hello from JNI!"); return JNI_VERSION_1_6; } void println_java(JNIEnv *env, const char *msg) { // Get system class jclass syscls = env->FindClass("java/lang/System"); // Lookup the "out" field jfieldID fid = env->GetStaticFieldID(syscls, "out", "Ljava/io/PrintStream;"); jobject out = env->GetStaticObjectField(syscls, fid); // Get PrintStream class jclass pscls = env->FindClass("java/io/PrintStream"); // Lookup printLn(String) jmethodID mid = env->GetMethodID(pscls, "println", "(Ljava/lang/String;)V"); // Invoke the method jstring str = env->NewStringUTF(msg); env->CallVoidMethod(out, mid, str); } extern "C" JNIEXPORT jstring JNICALL Java_Test_stringFromJNI(JNIEnv *env, jobject thiz) { return env->NewStringUTF("Hello String from JNI"); }