コード例 #1
0
ファイル: JniWrapper.cs プロジェクト: bcrusu/jvm4csharp
        public static unsafe IntPtr CreateJavaVm(IEnumerable<string> jvmOptions, JvmHooks jvmHooks)
        {
            Debug.Assert(jvmOptions != null);
            Debug.Assert(jvmHooks != null);

            var initArgs = GetJavaVmInitArgs(jvmOptions.EmptyIfNull().ToArray(), jvmHooks);
            try
            {
                IntPtr jvmPtr;
                IntPtr envPtr;

                var result = JniApiImport.JNI_CreateJavaVM(out jvmPtr, out envPtr, &initArgs);
                WrapperHelpers.VerifyJniResult(result);

                return jvmPtr;
            }
            finally
            {
                ReleaseJavaVmInitArgs(initArgs);
            }
        }
コード例 #2
0
ファイル: JniWrapper.cs プロジェクト: bcrusu/jvm4csharp
        private static unsafe JavaVmInitArgs GetJavaVmInitArgs(string[] jvmOptions, JvmHooks jvmHooks)
        {
            var initArgs = default(JavaVmInitArgs);
            initArgs.version = (int)PreferredJniVersion;
            initArgs.ignoreUnrecognized = JniBooleanValue.True;

            var nativeJvmOptions = new JavaVmOption[jvmOptions.Length + 3];

            //exit
            nativeJvmOptions[0].optionString = Marshal.StringToHGlobalAnsi("exit");
            JniHooksSig.Exit exitHook = jvmHooks.GetExitHook();
            if (exitHook != null)
                nativeJvmOptions[0].extraInfo = Marshal.GetFunctionPointerForDelegate(exitHook);
            else
                nativeJvmOptions[0].extraInfo = DefaultExitHookPtr;

            //abort
            nativeJvmOptions[1].optionString = Marshal.StringToHGlobalAnsi("abort");
            JniHooksSig.Abort abortHook = jvmHooks.GetAbortHook();
            if (abortHook != null)
                nativeJvmOptions[1].extraInfo = Marshal.GetFunctionPointerForDelegate(abortHook);
            else
                nativeJvmOptions[1].extraInfo = DefaultAbortHookPtr;

            //vfprintf
            nativeJvmOptions[2].optionString = Marshal.StringToHGlobalAnsi("vfprintf");
            nativeJvmOptions[2].extraInfo = DefaultVfprintfHookPtr;

            for (var i = 0; i < jvmOptions.Length; i++)
                nativeJvmOptions[i + 3].optionString = Marshal.StringToHGlobalAnsi(jvmOptions[i]);

            //TODO: review fixed statement
            fixed (JavaVmOption* ptr = &nativeJvmOptions[0])
            {
                initArgs.options = ptr;
                initArgs.nOptions = nativeJvmOptions.Length;
            }

            return initArgs;
        }