internal static object UnwrapRef(ManagedJNIEnv env, IntPtr o) { //int i = o.ToInt32(); long il = o.ToInt64(); int i = (int)il; if (il > 0 && il <= Int32.MaxValue) { return env.UnwrapLocalRef(i); } if(i < 0) { return GlobalRefs.Unwrap(i); } return null; }
internal static JNIEnv* CreateJNIEnv() { ManagedJNIEnv env = new ManagedJNIEnv(); TlsHack.ManagedJNIEnv = env; JNIEnv* pJNIEnv = env.pJNIEnv; pJNIEnv->vtable = VtableBuilder.vtable; pJNIEnv->managedJNIEnv = GCHandle.Alloc(env, GCHandleType.WeakTrackResurrection); pJNIEnv->criticalArrayHandle1 = GCHandle.Alloc(null, GCHandleType.Pinned); pJNIEnv->criticalArrayHandle2 = GCHandle.Alloc(null, GCHandleType.Pinned); return pJNIEnv; }
private static object InvokeNonVirtual(ManagedJNIEnv env, MethodWrapper mw, object obj, object[] argarray) { if (mw.HasCallerID || mw.IsDynamicOnly) { throw new NotSupportedException(); } if (mw.DeclaringType.IsRemapped && !mw.DeclaringType.TypeAsBaseType.IsInstanceOfType(obj)) { return mw.InvokeNonvirtualRemapped(obj, argarray); } else { Delegate del = (Delegate)Activator.CreateInstance(mw.GetDelegateType(), new object[] { obj, mw.GetMethod().MethodHandle.GetFunctionPointer() }); try { return del.DynamicInvoke(argarray); } catch (TargetInvocationException x) { throw ikvm.runtime.Util.mapException(x.InnerException); } } }
internal static object UnwrapRef(ManagedJNIEnv env, IntPtr o) { int i = o.ToInt32(); if(i > 0) { return env.UnwrapLocalRef(i); } if(i < 0) { return GlobalRefs.Unwrap(i); } return null; }
internal static JNIEnv* CreateJNIEnv() { ManagedJNIEnv env = new ManagedJNIEnv(); TlsHack.ManagedJNIEnv = env; JNIEnv* pJNIEnv = env.pJNIEnv; pJNIEnv->vtable = VtableBuilder.vtable; pJNIEnv->managedJNIEnv = GCHandle.Alloc(env, GCHandleType.WeakTrackResurrection); pJNIEnv->pinHandles = null; pJNIEnv->pinHandleMaxCount = 0; pJNIEnv->pinHandleInUseCount = 0; return pJNIEnv; }