22.7Invocation-API
Bisher haben wir JNI nur als Einbahnstraße gesehen (nicht im negativen Sinne). Doch anstatt nur aus Java heraus ein C(++)-Programm anzubinden, bietet JNI auch den anderen Weg: Ein C(++)-Programm kann die gesamte JVM einbetten. Das ist über die Invocation-API möglich. Im Prinzip reicht Folgendes aus:
int main() {
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs jvmargs;
jint r;
jvmargs.nOptions = 0;
jvmargs.version = JNI_VERSION_1_7;
r = JNI_CreateJavaVM( &jvm, (void**)&env, &jvmargs );
if ( r < 0 )
return –1;
// Ab hier ist über env alles möglich wie vorher
(*jvm)->DestroyJavaVM( jvm );
}
Wer das Programm übersetzt, der sollte daran denken, die dynamische Bibliothek jvm.dll im Suchpfad zu haben; die Datei befindet sich im Java-Verzeichnis unter jre7\bin\client.