Subject:
[ruby-ffi] Re: Basic question about types
From:
Gimi
Date:
10/25/09 11:12 PM
To:
ruby-ffi


Thank you again Wayne.

Since this feature is not necessary for me ( guess nobody needs this
yet ), and I was just wondering its possibility, adding it to the
issue tracker makes little sense.

Your help is greatly appreciated. Have a happy day!

On Oct 26, 11:24 am, Wayne Meissner <wmeiss...@gmail.com> wrote:
> In general, no, you can't call va_list functions.  I mean, technically
> it is possible if you allocate memory, pack the arguments in the same
> way the native code would, then pass that pointer in (I think), but if
> you have the choice, you may as well call the varargs version.
>
> FFI could be made do that behind the scenes - it just hasn't come up
> before.  Would be a good project for someone, so if you want it, add
> it to the issue tracker (http://github.com/ffi/ffi/issues), and
> someone may pick it up.
>
> 2009/10/22 Gimi <liang.g...@gmail.com>:
>
>
>
>
>
> > Thank you very much Wayne, thank you for your so-detailed replies!
>
> > For the 2nd question, I'd already known about :varargs and its usage.
> > My question is how about a function which uses va_list as a parameter,
> > like this:
> > int vprintf ( const char * format, va_list arg );
>
> > According to my test, it's impossible to do it in this way:
> > #-- code --
> > attach_function :vprintf, [:string, :varargs], :int
> > # -- code end --
>
> > As va_llist actually is void*,  so I guess I should do:
> > #-- code --
> > attach_function :vprintf, [:string, :pointer], :int
> > #-- code end --
> > But I don't know how to call it.
>
> > Although it's not important to do that because there are always(i
> > guess) a :varargs version for this kind of va_list-style-function, I
> > just want to know is it possible to do this in Ruby-FFI.
>
> > With many thanks!
>
> > Sincerely,
> > Gimi
>
> > On Oct 21, 7:21 am, Wayne Meissner <wmeiss...@gmail.com> wrote:
> >> You specifiy variadic parameters as :varargs, and when you call the
> >> function, you need to explicitly specify the type of the parameters.
> >> e.g.
> >> # this says printf takes a string parameter, followed by a variable
> >> number of parameters
> >>   attach_function :printf, [ :string, :varargs ], :int
>
> >> # You don't need to specify the type of any fixed params, since it is part of
> >> # the function signature, but you do need to for each varargs parameter
>
> >> LibC.printf("Hello, %s", :string, "World")
>
> >> 2009/10/21 Gimi <liang.g...@gmail.com>:
>
> >> > Hi, it's me again : )
>
> >> > I just wanna ask one more question, how to deal with the va_list
> >> > parameter? Like the vprintf method, how to attach and call it?
>
> >> > With many thanks!
> >> > Gimi
>
> >> > On Oct 20, 10:10 am, Gimi <liang.g...@gmail.com> wrote:
> >> >> Hi all,
>
> >> >> I'm new to FFI, and I have a basic question about types. Assume there
> >> >> is some C code like this:
> >> >> # -- C code begin --
> >> >> #if some situation
> >> >> typedef sometype unsignedint
> >> >> #else
> >> >> typedef sometype int
> >> >> #endif
>
> >> >> void some_function(sometype);
> >> >> #-- C code end --
>
> >> >> So I mean when the types of parameters of a function are different in
> >> >> different situations, how do I write the Ruby code?
>
> >> >> Any help will be greatly appreciated.
>
> >> >> Regards,