Hi Andrey! thanks for answer! But actually I don't understand how to receive context inside callback from C-code. May be I'm wrong here but as I understand you mean that I have to identify instance of *A using callback parameters received from C-side. But what about if I'll receive only sum of two arguments a+b, I don't know the result until I'll receive it from C-side and I don't know which instance should be called if callback receive ex: 10 - should it be an instance which handle 5+5 or another one used for 2+8.
Thanks again! Sorry if I don't understand you correctly. On Friday, June 17, 2016 at 9:45:02 PM UTC+6, andrey mirtchovski wrote: > > I doubt that the cgo_callback method has the type the C library > desires. from https://golang.org/ref/spec#Method_declarations: > > The type of a method is the type of a function with the > receiver as first argument. > > I.e., the type of cgo_callback is func(a *A, ...). > > The solution is to have a proper C function callback with the correct > type signature expected by the C side and resolve the correct (a *A) > to call inside the callback. Something like: > > //export _callbackfunc > func _callbackfunc(fd C.int, context unsafe.Pointer) C._error_t { > a := findA(context) // resolves the correct *A based on the context > return C._error_t(a.Callback(int(fd))) > } > > On Fri, Jun 17, 2016 at 3:23 AM, <and...@breakoutcommerce.com > <javascript:>> wrote: > > Hello, > > > > Could you guys please help me. > > > > I can't find how to export method function which belongs to some > go-struct > > to C-code (cgo part) as callback. I know how to export simple function > which > > not belongs to any type and use it as callback for C-function, but is it > > possibly to export method of concrete struct instance? since I need > > additional info when callback will be called from C-code. As example > what > > I'm trying to explain: > > > > // extern int goCallbackHandler(int, int); > > // > > // static int doAdd(int a, int b) { > > // return goCallbackHandler(a, b); > > // } > > > > import "C" > > > > type A struct { > > ... some data which used to process callback from C-side > > } > > > > // export cgo_callback > > func (a *A) cgo_callback(...){ <-----main problem here > > } > > > > main { > > C.doAdd(...) > > } > > > > I can't modify c-side - I have only compiled library, so I don't know > how to > > identify which instance of struct should be used to properly process > C-call > > of go-side callback. > > > > Thanks, > > Andrey > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "golang-nuts" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to golang-nuts...@googlegroups.com <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.