Subject:
Re: [ruby-ffi] Pointer to a struct - how to cast?
From:
Jeremy Voorhis
Date:
5/20/10 2:59 PM
To:
ruby-ffi@googlegroups.com

Check out Pointer#get_array_of_type. You can also do it with FFI::Pointer arithmetic.

Jeremy

On Thu, May 20, 2010 at 12:04 PM, DA <drew.avis@gmail.com> wrote:
On Thu, May 20, 2010 at 2:48 PM, Chuck Remes <cremes.devlist@mac.com> wrote:

> That looks kind of funky to me. In the F_TextItemsT C struct, it shows *val which is just a single pointer. There is no array of pointers to read from at that location. I believe the syntax for arrays of pointers are more like:
>
> struct {
>  int len;
>  item_t **list;
> }
>
> Note the double-asterisk.
>
> Have you written this in C to see how to get each F_TextItemT?

Hi Chuck, you're right, that pointer is for an array of F_TextItemT,
*not* an array of pointers to F_TextItemT.

The c code looks like this:

tis = F_ApiGetText(docId, flowId, FTI_String | FTI_LineEnd);
/* Traverse text items and print strings and line ends. */
for (i=0; i<tis.len; i++)
{
ip = &tis.val[i];
if (ip->dataType == FTI_String)
F_Printf(NULL,"%s", ip->u.sdata);
else F_Printf(NULL,"\n");
}

So I guess I need the equivalent of "get_array_of_struct"?  I can't
find an example for this case (array of struct) on the wiki.  Any
ideas?

Thanks,
Drew