public static void CreateJavaVM(out JavaVM jvm, out JNIEnv env, bool attachIfExists, params string[] options) { Init(); IntPtr njvm; IntPtr nenv; var args = new JavaVMInitArgs(); args.version = JNI_VERSION_1_4; if (options.Length > 0) { args.nOptions = options.Length; var opt = new JavaVMOption[options.Length]; for (int i = 0; i < options.Length; i++) { opt[i].optionString = Marshal.StringToHGlobalAnsi(options[i]); } fixed(JavaVMOption *a = &opt[0]) { args.options = a; } } JNIResult result; if (attachIfExists) { IntPtr njvma; int count; result = Dll.JNI_GetCreatedJavaVMs(out njvma, 1, out count); if (result != JNIResult.JNI_OK) { throw new JNIException("Can't enumerate current JVMs " + result); } if (count > 0) { njvm = njvma; jvm = new JavaVM(njvm); result = jvm.AttachCurrentThread(out env, args); if (result != JNIResult.JNI_OK) { throw new JNIException("Can't join current JVM " + result); } return; } } result = Dll.JNI_CreateJavaVM(out njvm, out nenv, &args); if (result != JNIResult.JNI_OK) { Console.Error.WriteLine("Can't load JVM (already have one ?)"); throw new JNIException("Can't load JVM (already have one ?) " + result); } jvm = new JavaVM(njvm); env = new JNIEnv(nenv); }
public static void CreateJavaVM(out JavaVM jvm, out JNIEnv env, bool attachIfExists, params string[] options) { Init(); IntPtr njvm; IntPtr nenv; var args = new JavaVMInitArgs(); args.version = JNI_VERSION_1_4; if (options.Length > 0) { args.nOptions = options.Length; var opt = new JavaVMOption[options.Length]; for (int i = 0; i < options.Length; i++) { opt[i].optionString = Marshal.StringToHGlobalAnsi(options[i]); } fixed (JavaVMOption* a = &opt[0]) { args.options = a; } } JNIResult result; if (attachIfExists) { IntPtr njvma; int count; result = Dll.JNI_GetCreatedJavaVMs(out njvma, 1, out count); if (result != JNIResult.JNI_OK) { throw new JNIException("Can't enumerate current JVMs " + result); } if (count > 0) { njvm = njvma; jvm = new JavaVM(njvm); result = jvm.AttachCurrentThread(out env, args); if (result != JNIResult.JNI_OK) { throw new JNIException("Can't join current JVM " + result); } return; } } result = Dll.JNI_CreateJavaVM(out njvm, out nenv, &args); if (result != JNIResult.JNI_OK) { Console.Error.WriteLine("Can't load JVM (already have one ?)"); throw new JNIException("Can't load JVM (already have one ?) " + result); } jvm = new JavaVM(njvm); env = new JNIEnv(nenv); }