hi jim ... and thank you ! you've explained clearly what I missed. I now remove the init function and retrieve the (void* user_data) when i pass the callback. it's well done automatically by vala. thanks again.
Cyrille. Le mardi 28 septembre 2010 à 11:55 -0700, Jim Nelson a écrit : > If you're trying to use a delegate from C, you need to be aware of the > delegate's target, which is a hidden parameter to Vala code but > visible in C. > > If you compile your code with the --save-temps flag enabled, you can > see how a delegate is constructed in C. For example: > > delegate void Callback(int32 i); > > Becomes this in the .c: > > typedef void (*Callback) (gint32 i, void* user_data); > > The user_data is the target (in Vala-parlance). Your C code should > invoke the callback like this: > > Callback _cb = cb; > ... > _cb (i, obj); > > Rob's right, you can't (or shouldn't) assign to "this" in Vala. When > you invoke the callback with obj as the user_data, Vala's internal > code will use it as the "this" reference. > > A useful reference if you're making a VAPI: > http://live.gnome.org/Vala/Bindings/MetadataFormat > > -- Jim > > On Tue, Sep 28, 2010 at 5:10 AM, Cyrille Colin <co...@univ-metz.fr> > wrote: > hi, > i've just update to 0.10 from 0.8.1 and I guess now vala > detect one of > my bad. > I used a init function to give my object pointer to external > function > that will manage callback : > > init(this) > > init() is define in a vapi : > public static void init (ValaObj obj); > > and use in External library like this : > > static void *ValaObj; > void init (void *obj) { > ValaObj = obj; > } > > Then i define in vapi the callback, C -> Vala : > public delegate uint32 callback ( ValaObj, int value); > > and this is my callback in Vala code: > public uint32 cb (ValaObj obj, int value) { > this = obj; > ... > } > it works fine with 0.8.1 and throw exception with 0.10 : > error: unsupported lvalue in assignment > May someone could help me, > thanks in advance, > Cyrille. > > > > > _______________________________________________ > vala-list mailing list > vala-list@gnome.org > http://mail.gnome.org/mailman/listinfo/vala-list > _______________________________________________ vala-list mailing list vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list