Example #1
0
func (self *Environment) RegisterNative(className string, method string, sig types.MethodSignature, fptr interface{}) error {
	class, err := self.GetClass(types.NewName(className))
	if err != nil {
		return err
	}
	cname := C.CString(method)
	defer C.free(unsafe.Pointer(cname))

	csig := C.CString(sig.String())
	defer C.free(unsafe.Pointer(csig))
	C.envRegisterNative(self.env, class.class, cname, csig, fptr.(unsafe.Pointer))

	return nil
}
Example #2
0
func (self *Environment) RegisterNative(c *Class, name string, fptr interface{}) (err error) {
	//	env.RegisterNative(klass, "NativePing", func(E *environment.Environment, O *environment.Object)(Error){
	//		nativePings += 1
	//	})

	cname := C.CString(name)
	defer C.free(unsafe.Pointer(cname))
	id, sig, err := self.jvm.addNative(self, fptr)
	csig := C.CString(sig.String())
	defer C.free(unsafe.Pointer(csig))
	if err != nil {
		return
	}

	if 0 != C.envRegisterNative(self.env, c.class, cname, csig, C.int(id)) {
		err = self.ExceptionOccurred()
	}
	return
}