On 9 Nov 2016, at 02:33, Igor Stasenko <siguctua@gmail.com> wrote:On 8 November 2016 at 13:11, Esteban Lorenzano <estebanlm@gmail.com> wrote:On 8 Nov 2016, at 12:55, Dimitris Chloupis <kilon.alios@gmail.com> wrote:Thank you EstebanBy 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.
EstebanOn Tue, Nov 8, 2016 at 1:54 PM Esteban Lorenzano <estebanlm@gmail.com> wrote:On 8 Nov 2016, at 12:49, Dimitris Chloupis <kilon.alios@gmail.com> wrote:I was reaching a similar conclusionCurrently I have a void pointer to the struct with the members I mentionedI can get char[100]pointerToStruct fromCStringand I can get the int withpointerToStruct getHandle integerAt: 101 size:4 signed: falseso if I want to pass the address of the pointer to my YourStruct instance will I have to initialize withYourStruct fromHandler: (pointerToStruct getHandle)is this a correct and safe way to pass the address ?yes.EstebanOn Tue, Nov 8, 2016 at 1:21 PM Esteban Lorenzano <estebanlm@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.alios@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.