Michael 'Mickey' Lauer wrote:
> Thanks for your mails, I think the VAPI part is clear to me now. 
> Unfortunately 
> I still can't do the actual setting of the callback. I have:
> 
> 
> =========== gsm0710_p.h ===========
> 
> typedef    int     (*gsm0710_context_at_command_callback)(struct 
> gsm0710_context *ctx, const char *cmd);
> ...
> struct gsm0710_context
> {
>     /* variables */
> ...
>     gsm0710_context_at_command_callback at_command;
> ...
> }
> 
> ========= gsm0710.vapi ===========
>         [CCode (instance_pos = 0)]
>         public delegate int AtCommandCallback( string cmd );
> 
> ========= multiplexer.vala ==========
> public class Multiplexer : Object
> {
>     Context ctx;
> 
>     public static int at_command_cb( Context ctx, char* command )
>     {
>         Multiplexer m = (Multiplexer) ctx.user_data;
>         debug( "CB: atCommand %s", (string)command );
>         return 1;
>     }
> 
>     public Multiplexer( bool advanced, int framesize, string device, int 
> portspeed )
>     {
>         debug( "Multiplexer created for mode %s, framesize %d, device %s 
> @ %d", advanced? "advanced":"basic", framesize, device, portspeed );
>         ctx = new Context();
>         ctx.initialize();
> 
>         ctx.server = 1;
>         ctx.mode = advanced? 1 : 0;
>         ctx.frame_size = framesize;
>         ctx.port_speed = portspeed;
> 
>         ctx.at_command = at_command_cb;
>     }
> }
> 
> I now get the following error:
> 
> make[1]: Leaving directory `/local/pkg/fso/fso-gsm0710muxd'
> /usr/local/bin/valac -c --vapidir gsm0710 --pkg dbus-glib-1 --pkg 
> gsm0710 --save-temps --basedir . src/consts.vala src/multiplexer.vala 
> src/server.vala src/main.vala
> src/multiplexer.vala:53.9-53.38: error: Assignment: Cannot convert from 
> `Multiplexer.at_command_cb' to `Gsm0710.Context.AtCommandCallback'
>         ctx.at_command = at_command_cb;
>         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Compilation failed: 1 error(s), 0 warning(s)
> 
> What am I missing?
> 
> Cheers,
> 
> Mickey.
> _______________________________________________
> Vala-list mailing list
> Vala-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/vala-list
> 

If you give it a different name ('AtCommandCallback' instead of
'at_command_callback') you should specify a 'cname'-attribute with the
original C name. And make the delegate static, as Jürg wrote, and pass
the context explicitly, since it is not intended as instance data
('this') but as callback source object.

-----------

[CCode (cname="gsm0710_context_at_command_callback")]
public static delegate int AtCommandCallback( Context ctx, string cmd );

-----------

public static int at_command_cb( Context ctx, string command )
{
    Multiplexer m = (Multiplexer) ctx.user_data;
    debug( "CB: atCommand %s", command );
    return 1;
}

// ...


Regards,

Frederik
_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to