// Call calls the given object method with the provided parameters. // Call panics if the method does not exist. func (obj *Common) Call(method string, params ...interface{}) interface{} { if len(params) > len(dataValueArray) { panic("too many parameters") } cmethod, cmethodLen := unsafeStringData(method) var result C.DataValue var cerr *C.error gui(func() { for i, param := range params { packDataValue(param, &dataValueArray[i], obj.engine, jsOwner) } cerr = C.objectInvoke(obj.addr, cmethod, cmethodLen, &result, &dataValueArray[0], C.int(len(params))) }) cmust(cerr) return unpackDataValue(&result, obj.engine) }
// Call calls the given object method with the provided parameters. // Call panics if the method does not exist. func (obj *Object) Call(method string, params ...interface{}) interface{} { if len(params) > len(dataValueArray) { panic("too many parameters") } cmethod := C.CString(method) defer C.free(unsafe.Pointer(cmethod)) var result C.DataValue gui(func() { for i, param := range params { packDataValue(param, &dataValueArray[i], obj.engine, jsOwner) } // TODO Panic if the underlying invokation returns false. // TODO Is there any other actual error other than existence that can be observed? // If so, this method needs an error result too. C.objectInvoke(obj.addr, cmethod, &result, &dataValueArray[0], C.int(len(params))) }) return unpackDataValue(&result, obj.engine) }