本文整理汇总了C#中IKVM.Runtime.JNIEnv类的典型用法代码示例。如果您正苦于以下问题:C# JNIEnv类的具体用法?C# JNIEnv怎么用?C# JNIEnv使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
JNIEnv类属于IKVM.Runtime命名空间,在下文中一共展示了JNIEnv类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SetObjectArrayElement
internal static void SetObjectArrayElement(JNIEnv* pEnv, jarray array, jsize index, jobject val)
{
try
{
// we want to support (non-primitive) value types so we can't cast to object[]
((Array)pEnv->UnwrapRef(array)).SetValue(pEnv->UnwrapRef(val), index);
}
catch(IndexOutOfRangeException)
{
SetPendingException(pEnv, new java.lang.ArrayIndexOutOfBoundsException());
}
}
示例2: NewDirectByteBuffer
internal static jobject NewDirectByteBuffer(JNIEnv* pEnv, IntPtr address, jlong capacity)
{
try
{
if(capacity < 0 || capacity > int.MaxValue)
{
SetPendingException(pEnv, new java.lang.IllegalArgumentException("capacity"));
return IntPtr.Zero;
}
return pEnv->MakeLocalRef(JVM.NewDirectByteBuffer(address.ToInt64(), (int)capacity));
}
catch(Exception x)
{
SetPendingException(pEnv, ikvm.runtime.Util.mapException(x));
return IntPtr.Zero;
}
}
示例3: GetDirectBufferCapacity
internal static jlong GetDirectBufferCapacity(JNIEnv* pEnv, jobject buf)
{
try
{
return (jlong)(long)((java.nio.Buffer)pEnv->UnwrapRef(buf)).capacity();
}
catch(Exception x)
{
SetPendingException(pEnv, ikvm.runtime.Util.mapException(x));
return 0;
}
}
示例4: ReleaseStringCritical
internal static void ReleaseStringCritical(JNIEnv* pEnv, jstring str, jchar* cstring)
{
Marshal.FreeHGlobal((IntPtr)(void*)cstring);
}
示例5: DeleteWeakGlobalRef
internal static void DeleteWeakGlobalRef(JNIEnv* pEnv, jweak obj)
{
int i = obj.ToInt32();
if(i < 0)
{
i = -i;
i -= (1 << 30);
lock(GlobalRefs.weakRefLock)
{
GlobalRefs.weakRefs[i].Free();
}
}
if(i > 0)
{
Debug.Assert(false, "local ref passed to DeleteWeakGlobalRef");
}
}
示例6: GetStringUTFRegion
internal static void GetStringUTFRegion(JNIEnv* pEnv, IntPtr str, int start, int len, IntPtr buf)
{
string s = (string)pEnv->UnwrapRef(str);
if(s != null)
{
if(start < 0 || start > s.Length || s.Length - start < len)
{
SetPendingException(pEnv, new java.lang.StringIndexOutOfBoundsException());
return;
}
else
{
byte* p = (byte*)(void*)buf;
for(int i = 0; i < len; i++)
{
char ch = s[start + i];
if((ch != 0) && (ch <= 0x7F))
{
*p++ = (byte)ch;
}
else if(ch <= 0x7FF)
{
*p++ = (byte)((ch >> 6) | 0xC0);
*p++ = (byte)((ch & 0x3F) | 0x80);
}
else
{
*p++ = (byte)((ch >> 12) | 0xE0);
*p++ = (byte)(((ch >> 6) & 0x3F) | 0x80);
*p++ = (byte)((ch & 0x3F) | 0x80);
}
}
return;
}
}
else
{
SetPendingException(pEnv, new java.lang.NullPointerException());
}
}
示例7: ReleasePrimitiveArrayCritical
internal static void ReleasePrimitiveArrayCritical(JNIEnv* pEnv, jarray array, void* carray, jint mode)
{
Array ar = (Array)pEnv->UnwrapRef(array);
if(pEnv->criticalArrayHandle1.Target == ar
&& (void*)pEnv->criticalArrayHandle1.AddrOfPinnedObject() == carray)
{
if(mode == 0 || mode == JNI_ABORT)
{
pEnv->criticalArrayHandle1.Target = null;
}
return;
}
if(pEnv->criticalArrayHandle2.Target == ar
&& (void*)pEnv->criticalArrayHandle2.AddrOfPinnedObject() == carray)
{
if(mode == 0 || mode == JNI_ABORT)
{
pEnv->criticalArrayHandle2.Target = null;
}
return;
}
if(mode == 0 || mode == JNI_COMMIT)
{
// TODO not 64-bit safe (len can overflow)
int len = ar.Length * GetPrimitiveArrayElementSize(ar);
GCHandle h = GCHandle.Alloc(ar, GCHandleType.Pinned);
try
{
byte* pdst = (byte*)(void*)h.AddrOfPinnedObject();
byte* psrc = (byte*)(void*)carray;
// TODO isn't there a managed memcpy?
for(int i = 0; i < len; i++)
{
*pdst++ = *psrc++;
}
}
finally
{
h.Free();
}
}
if(mode == 0 || mode == JNI_ABORT)
{
JniMem.Free((IntPtr)carray);
}
}
示例8: ReleaseByteArrayElements
internal static void ReleaseByteArrayElements(JNIEnv* pEnv, jbyteArray array, jbyte* elems, jint mode)
{
if(mode == 0 || mode == JNI_COMMIT)
{
byte[] b = (byte[])pEnv->UnwrapRef(array);
for(int i = 0; i < b.Length; i++)
{
b[i] = (byte)elems[i];
}
}
if(mode == 0 || mode == JNI_ABORT)
{
JniMem.Free((IntPtr)(void*)elems);
}
}
示例9: ReleaseDoubleArrayElements
internal static void ReleaseDoubleArrayElements(JNIEnv* pEnv, jdoubleArray array, jdouble* elems, jint mode)
{
if(mode == 0 || mode == JNI_COMMIT)
{
double[] b = (double[])pEnv->UnwrapRef(array);
Marshal.Copy((IntPtr)(void*)elems, b, 0, b.Length);
}
if(mode == 0 || mode == JNI_ABORT)
{
JniMem.Free((IntPtr)(void*)elems);
}
}
示例10: GetFloatArrayElements
internal static jfloat* GetFloatArrayElements(JNIEnv* pEnv, jfloatArray array, jboolean* isCopy)
{
float[] b = (float[])pEnv->UnwrapRef(array);
IntPtr buf = JniMem.Alloc(b.Length * 4);
Marshal.Copy(b, 0, buf, b.Length);
if(isCopy != null)
{
*isCopy = JNI_TRUE;
}
return (jfloat*)(void*)buf;
}
示例11: GetDoubleArrayElements
internal static jdouble* GetDoubleArrayElements(JNIEnv* pEnv, jdoubleArray array, jboolean* isCopy)
{
double[] b = (double[])pEnv->UnwrapRef(array);
IntPtr buf = JniMem.Alloc(b.Length * 8);
Marshal.Copy(b, 0, buf, b.Length);
if(isCopy != null)
{
*isCopy = JNI_TRUE;
}
return (jdouble*)(void*)buf;
}
示例12: GetCharArrayElements
internal static jchar* GetCharArrayElements(JNIEnv* pEnv, jcharArray array, jboolean* isCopy)
{
char[] b = (char[])pEnv->UnwrapRef(array);
IntPtr buf = JniMem.Alloc(b.Length * 2);
Marshal.Copy(b, 0, buf, b.Length);
if(isCopy != null)
{
*isCopy = JNI_TRUE;
}
return (jchar*)(void*)buf;
}
示例13: GetByteArrayElements
internal static jbyte* GetByteArrayElements(JNIEnv* pEnv, jbyteArray array, jboolean* isCopy)
{
byte[] b = (byte[])pEnv->UnwrapRef(array);
jbyte* p = (jbyte*)(void*)JniMem.Alloc(b.Length * 1);
for(int i = 0; i < b.Length; i++)
{
p[i] = (jbyte)b[i];
}
if(isCopy != null)
{
*isCopy = JNI_TRUE;
}
return p;
}
示例14: NewDoubleArray
internal static jdoubleArray NewDoubleArray(JNIEnv* pEnv, jsize len)
{
try
{
return pEnv->MakeLocalRef(new double[len]);
}
catch(Exception x)
{
SetPendingException(pEnv, x);
return IntPtr.Zero;
}
}
示例15: GetJavaVM
internal static int GetJavaVM(JNIEnv* pEnv, JavaVM **ppJavaVM)
{
*ppJavaVM = JavaVM.pJavaVM;
return JNI_OK;
}