[gambit-list] How to pass a u8vector to the FFI

Álvaro Castro-Castilla alvaro.castro.castilla at gmail.com
Tue Mar 30 10:52:40 EDT 2010


2010/3/30 Marc Feeley <feeley at iro.umontreal.ca>

>
> On 2010-03-30, at 10:39 AM, Bradley Lucier wrote:
>
> > I believe you can use something like
> >
> > ___CAST(___sU8VECTOR*,___BODY_AS(obj,___tSUBTYPED))
>
> The first argument to ___CAST must be a type... but ___sU8VECTOR is the
> subtype tag (an integer constant).  So you want:
>
> ___CAST(___U8*,___BODY_AS(obj,___tSUBTYPED))
>
> because ___U8 is defined as an unsigned char (on most platforms) by
> gambit.h .
>
> Marc
>
>
Yes. I've tried all methods and they all work. Assuming that the third
argument is the u8vector:

void *u8vectorptr = ___CAST(void*,&___FETCH_U8(___BODY(___arg3),___INT(0)));
void *u8vectorptr = ___CAST(void*,&___FETCH_U8(___arg3,0));
void *u8vectorptr = ___CAST(___U8*,___BODY_AS(___arg3,___tSUBTYPED));
void *u8vectorptr = ___CAST(void*,___BODY(___arg3));

They all can be cast to uchar* directly:

unsigned char *u8vectorptr =
___CAST(___U8*,___BODY_AS(___arg3,___tSUBTYPED));


All produce the result I expect (apparently).

Thanks a lot for all your explanations. I'd like to put this in the wiki
page:

http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Using_Gambit_with_External_Libraries

is that ok?





> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20100330/65e73463/attachment.htm>


More information about the Gambit-list mailing list