Eric Hodel <drbrain / segment7.net> wrote:

>      typealias "FOO", "void *"
> 
> Something like this should do it.  (Yeah, void * is probably the wrong
> type, see dl/types for what types dl knows about.)

Right, typealias-ing to 'void*' seems to do the trick for this case,
although I'm not sure if it's really the correct way or just a
coincidence. dl/types (mostly) knows about primitive types and pointers
to primitive types, and I'm not sure how structs passed on the stack can
relate to these.

Because if we now consider this:

Adding this function to foo.c:

  void dump_foo( FOO foo )
  {
      printf( "foo.bar = %d\n", foo.bar );
      printf( "foo.baz = %d\n", foo.baz );
  }

And then adding this to foo.rb:

  extern 'void dump_foo(FOO)'

And then doing:

  foo = Foo.my_make_a_foo
  Foo.dump_foo( foo )

Gives:

  foo.bar = -1073791088
  foo.baz = 891578649

Instead of:

  foo.bar = 42
  foo.baz = 1

That's why I'm a bit suspicious about the 'void*' thing ;)

-- 
Luc Heinrich - lucsky / mac.com