[gtk-server] Re: R: Re: R: How to bind varargs functions

  • From: Peter van Eerten <administrator@xxxxxxxxxxxxxx>
  • To: gtk-server@xxxxxxxxxxxxx
  • Date: Tue, 27 Dec 2005 17:48:52 +0100

Leonardo Cecchi has identified a bug in the 'gtk_server_redefine' function,
which, for certain GTK-functions and situations, may cause the GTK-server to
crash. The fix will be available in 2.0.7.

Thanks!

Peter

Citeren Peter van Eerten <administrator@xxxxxxxxxxxxxx>:

> Just to finalize this thread: the GTK-server cannot read the memory of
> newLisp
> (of course), nor vice versa. This is just an example; you should call the
> 'gtk'
> function by value, and not by reference. (For the newLisp syntax I sent you a
> private mail.)
>
> Peter
>
> Citeren Leonardo Cecchi <leonardoce@xxxxxxxxxxxx>:
>
> > Thanks Peter for the prompt reply!
> > Please help my to understand your code... the line:
> >
> > (set 'arg (address (pack "d" 64))))
> >
> > Store the address of the new allocated array in the arg variable right?
> > But Gtk-Server runs in another process... how can he read the memory of the
> > new-lisp process?
> >
> > Thanks and excuse me if the question is stupid.
> >
> > Leonardo
> >
> >
> >
> >
> > Peter van Eerten ha scritto:
> >
> > >Hi Leonardo,
> > >
> > >>From your tracefile I see you are using the call "gtk_list_store_new".
> > Looking
> > >further into this GTK function it appears that the second argument is of a
> > >C-type 'varargs'. This type cannot be converted by the GTK-server and is
> the
> > >reason for the crash.
> > >
> > >Instead, use "gtk_list_store_newv", which, as the GTK documentation
> states,
> > is
> > >used by language bindings.
> > >
> > >The second argument of this GTK function however expects a pointer to an
> > array
> > >of integers. In newLisp I would implement this as follows, using your
> value
> > for
> > >G_TYPE_STRING:
> > >
> > >(set 'arg (address (pack "d" 64))))
> > >(gtk "gtk_list_store_newv" 1 arg)
> > >
> > >
> > >As you may see, the client language must have the capability to construct
> a
> > C
> > >pointer. Languages like newLisp and Perl can do that. But I am not sure if
> > this
> > >is also possible with CLisp.
> > >
> > >The prototype in the configfile would look like:
> > >
> > >GTK_LIB_FUNCTION = gtk_list_store_newv, NONE, WIDGET, 2, LONG, LONG
> > >
> > >
> > >Best regards
> > >Peter

-- 
http://www.gtk-server.org

Other related posts: