On Sat, 2008-03-15 at 15:51 +0100, Jörn Reder wrote:
> > - You expose aosd_destroy. Try to avoid binding memory management
> > related functions. In this case, you can automate releasing the object
> > by writing a DESTROY xsub which calls aosd_destroy:
> >
> > void
> > DESTROY (Aosd *aosd)
> > CODE:
> > aosd_destroy (aosd);
> >
> > DESTROY is automatically called by perl when a variable goes out of
> > scope.
>
> Ok, just tried it but it doesn't work, because my Perl object is a
> scalar reference to Aosd*, so DESTROY doesn't get a Aosd* here, but a
> Perl scalar, which needs to be dereferenced first.
I completely forgot to take a look at Aosd.pm. Nearly everything in
there should be removed. When you specify a PREFIX in Aosd.xs, xsubpp
automatically strips it off of the xsub names. So aosd_get_screen_size
becomes get_screen_size and so on.
So:
MODULE = X11::Aosd PACKAGE = X11::Aosd PREFIX = aosd_
Then you need to alter the constructor so it can be used as
X11::Aosd->new and just ignores the class name:
Aosd *
aosd_new(class)
C_ARGS:
/* void */
Then remove every method in Aosd.pm.
> Is there a better way than building the Perl object on a scalar
> reference to Aosd*?
In typemap, you specify that T_PTROBJ is to be used for Aosd*. That
means that whenever a Aosd* pointer is encountered, it automatically
gets wrapped as an opaque scalar. So that should be fine.
--
Bye,
-Torsten
_______________________________________________
gtk-perl-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-perl-list