forked from gmp/jni
		
	feat: implement calling more non-static method types
This commit is contained in:
		
							parent
							
								
									2e7d20a1b4
								
							
						
					
					
						commit
						b5d97bc020
					
				
							
								
								
									
										7
									
								
								gojni.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								gojni.h
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -29,6 +29,13 @@ __attribute__ ((visibility ("hidden"))) void _jni_CallStaticVoidMethodA(JNIEnv *
 | 
			
		|||
__attribute__ ((visibility ("hidden"))) jobject _jni_CallObjectMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jint _jni_CallIntMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) void _jni_CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jboolean _jni_CallBooleanMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jbyte _jni_CallByteMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jchar _jni_CallCharMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jshort _jni_CallShortMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jlong _jni_CallLongMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jfloat _jni_CallFloatMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jdouble _jni_CallDoubleMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jbyteArray _jni_NewByteArray(JNIEnv *env, jsize length);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jbyte *_jni_GetByteArrayElements(JNIEnv *env, jbyteArray arr);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) void _jni_ReleaseByteArrayElements(JNIEnv *env, jbyteArray arr, jbyte *elems, jint mode);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										28
									
								
								jni.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								jni.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -134,6 +134,34 @@ void _jni_CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *ar
 | 
			
		|||
	(*env)->CallVoidMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jboolean _jni_CallBooleanMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallBooleanMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jbyte _jni_CallByteMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallByteMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jchar _jni_CallCharMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallCharMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jshort _jni_CallShortMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallShortMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jlong _jni_CallLongMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallLongMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jfloat _jni_CallFloatMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallFloatMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jdouble _jni_CallDoubleMethodA(JNIEnv *env, jobject obj, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallDoubleMethodA(env, obj, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jbyteArray _jni_NewByteArray(JNIEnv *env, jsize length) {
 | 
			
		||||
	return (*env)->NewByteArray(env, length);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										45
									
								
								jni.go
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								jni.go
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Package jni implements various helper functions for communicating with the
 | 
			
		||||
// Android JVM though JNI.
 | 
			
		||||
package jni
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +43,7 @@ type (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	TRUE = C.JNI_TRUE
 | 
			
		||||
	TRUE  = C.JNI_TRUE
 | 
			
		||||
	FALSE = C.JNI_FALSE
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -155,6 +154,48 @@ func CallIntMethod(e Env, obj Object, method MethodID, args ...Value) (int32, er
 | 
			
		|||
	return int32(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallBooleanMethod calls a method on an object, returning a bool.
 | 
			
		||||
func CallBooleanMethod(e Env, obj Object, method MethodID, args ...Value) (bool, error) {
 | 
			
		||||
	res := C._jni_CallBooleanMethodA(e.env, C.jobject(obj), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return res == TRUE, exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallByteMethod calls a method on an object, returning a byte.
 | 
			
		||||
func CallByteMethod(e Env, obj Object, method MethodID, args ...Value) (byte, error) {
 | 
			
		||||
	res := C._jni_CallByteMethodA(e.env, C.jobject(obj), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return byte(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallCharMethod calls a method on an object, returning a rune.
 | 
			
		||||
func CallCharMethod(e Env, obj Object, method MethodID, args ...Value) (rune, error) {
 | 
			
		||||
	res := C._jni_CallCharMethodA(e.env, C.jobject(obj), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return rune(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallShortMethod calls a method on an object, returning an int32.
 | 
			
		||||
func CallShortMethod(e Env, obj Object, method MethodID, args ...Value) (int16, error) {
 | 
			
		||||
	res := C._jni_CallShortMethodA(e.env, C.jobject(obj), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return int16(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallLongMethod calls a method on an object, returning an int64.
 | 
			
		||||
func CallLongMethod(e Env, obj Object, method MethodID, args ...Value) (int64, error) {
 | 
			
		||||
	res := C._jni_CallLongMethodA(e.env, C.jobject(obj), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return int64(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallFloatMethod calls a method on an object, returning a float32.
 | 
			
		||||
func CallFloatMethod(e Env, obj Object, method MethodID, args ...Value) (float32, error) {
 | 
			
		||||
	res := C._jni_CallFloatMethodA(e.env, C.jobject(obj), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return float32(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallDoubleMethod calls a method on an object, returning a float64.
 | 
			
		||||
func CallDoubleMethod(e Env, obj Object, method MethodID, args ...Value) (float64, error) {
 | 
			
		||||
	res := C._jni_CallDoubleMethodA(e.env, C.jobject(obj), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return float64(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetByteArrayElements returns the contents of the array.
 | 
			
		||||
func GetByteArrayElements(e Env, jarr ByteArray) []byte {
 | 
			
		||||
	size := C._jni_GetArrayLength(e.env, C.jarray(jarr))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user