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, > 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 .
> > 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.