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

Reply via email to