In data 3/23/2005, "(Luc Heinrich)" <lucsky / mac.com> ha scritto:

>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 ;)

Normally you'd cast from void*, of course, but I don't know
if it's possible in DL. Maybe pass around a struct FOO* instead?

That or just write a C extension.

>Luc Heinrich - lucsky / mac.com

E