Subject: [ruby-ffi] Re: Functions returning structures |
From: galdor |
Date: 12/14/09 3:42 PM |
To: ruby-ffi |
Thank you, it just works! I also had to use .by_value for parameters, of course. I'll notify the author of ffi-swig-generator about this, its tool doesn't produce these annotations. Regards, Nicolas Martyanoff On Dec 14, 10:33 pm, Wayne Meissner <wmeiss...@gmail.com> wrote:
<khae...@gmail.com>:You need to specify the return type as ALLEGRO_COLOR.by_value (same for any struct-by-value parameters). 2009/12/15 galdorHi,
Let's define a C function which returns a plain structure:
typedef struct { int r, g, b, a; } ALLEGRO_COLOR;
ALLEGRO_COLOR al_map_rgb(unsigned char r, unsigned char g, unsigned char b);
Now we bind it:
class ALLEGRO_COLOR < FFI::Struct layout :r, :float, :g, :float, :b, :float, :a, :float end
attach_function :al_map_rgb, [:uchar, :uchar, :uchar], ALLEGRO_COLOR
But the following ruby code doesn't work:
bgcolor = al_map_rgb(20, 20, 20) fgcolor = al_map_rgb(20, 40, 80) al_clear_to_color(bgcolor)
The screen is cleared with rgb(20, 40, 80), instead of rgb(20, 20, 20). I don't know how stack allocation is performed, I must be doing something wrong.
How should I work with stack-allocated structures ?
Regards,
Nicolas Martyanoff