As a said that expression does not exist

The one with size it does exist and creates an instance as you would
expect.

No idea what an anonymous class is.

I have experienced some slow downs because creating FFI types seems that
copies the data and Pharo chokes with my 3000 bytes char array. So I
decided not to use FFI types and instead fetch the data directly from
shared memory via the pointer which means

anExternalData getHandle unsignedCharAt: for reading
anExternalData getHandle unsignedCharAt: put: for writing

Plus copying the data to Pharo memory kinda defeats the purpose of using
shared memory in the first place and it's unnecessary .

But then I am a special case ... the recommended way remains using those
types.
On Wed, 9 Nov 2016 at 03:34, Igor Stasenko <siguc...@gmail.com> wrote:

> On 8 November 2016 at 13:11, Esteban Lorenzano <esteba...@gmail.com>
> wrote:
>
>
> On 8 Nov 2016, at 12:55, Dimitris Chloupis <kilon.al...@gmail.com> wrote:
>
> Thank you Esteban
>
> By the way I really love the design of UFFI , very clean and quite easy to
> understand , great work to you and Igor :)
>
>
> UFFI is just mine ;)
> (but I sanded in giant shoulders as I took Igor work as inspiration… and
> to “borrow” many cool ideas)
>
> Your credit is too generous :)
> Btw, is this expression:
>
>  FFITypeArray ofType: #char.
>
> creates anonymous class, or you making an instance of something?
>
> Because if it anonymous class, i was always warned against use it in such
> form, and instead use some kind of class initializers to
> generate all the 'types' you will use in future i.e.
>
> MyCalss class>>initialize
>    MyCharr100Type := FFITypeArray ofType: #char size:100.
>
> and then just use it wherever you need i.e.:
>
> mychars := MyChar100Type new.
>
> .. whatever.
>
>
> Esteban
>
>
> On Tue, Nov 8, 2016 at 1:54 PM Esteban Lorenzano <esteba...@gmail.com>
> wrote:
>
> On 8 Nov 2016, at 12:49, Dimitris Chloupis <kilon.al...@gmail.com> wrote:
>
> I was reaching a similar conclusion
>
> Currently I have a void pointer to the struct with the members I mentioned
>
> I can get char[100]
>
> pointerToStruct fromCString
>
> and I can get the int with
>
> pointerToStruct getHandle integerAt: 101 size:4  signed: false
>
> so if I want to pass the address of the pointer to my YourStruct instance
> will I have to initialize with
>
> YourStruct fromHandler: (pointerToStruct getHandle)
>
> is this a correct and safe way to pass the address ?
>
>
> yes.
>
> Esteban
>
>
>
> On Tue, Nov 8, 2016 at 1:21 PM Esteban Lorenzano <esteba...@gmail.com>
> wrote:
>
> it never could.
> you need to do a “special type”, who has to be something like:
>
> YourStruct class>>initialize
>         Char100 := FFITypeArray ofType: #char.
>
> fieldsDesc
>         ^ #(
>         Char100 data;
>         int count;
>         )
>
> but then… you want to optimise that and in field accessors, who will look
> something like this:
>
> YourStruct >>data
>         "This method was automatically generated"
>         ^(FFITypeArray ofType: #char size: 100) fromHandle: (handle
> copyFrom: 1 to: 100)
>
> you can change that for:
>
> YourStruct >>data
>         "This method was automatically generated"
>         ^Char100 fromHandle: (handle copyFrom: 1 to: 100)
>
> and same for setter.
> (other way will work, but it will be suboptimal)
>
> Esteban
>
> > On 8 Nov 2016, at 12:10, Dimitris Chloupis <kilon.al...@gmail.com>
> wrote:
> >
> > I have FFIExternalStructure which has at class side
> >
> > fieldsDesc
> > ^#(
> > char data[100];
> > int count;
> > )
> >
> > if I try to do
> >
> > EphCPPTestStructure rebuildFieldAccessors .
> >
> > in order to generate the accessors for the members of the struct it
> complains with an error that it does not recognise the type of " [ "
> >
> > Does that mean that char arrays are other arrays are not supported as
> struct members or will I have to do this manually ?
>
>
>
>
>
>
> --
> Best regards,
> Igor Stasenko.
>

Reply via email to