> On 9 Nov 2016, at 02:33, Igor Stasenko <[email protected]> wrote: > > > > On 8 November 2016 at 13:11, Esteban Lorenzano <[email protected] > <mailto:[email protected]>> wrote: > >> On 8 Nov 2016, at 12:55, Dimitris Chloupis <[email protected] >> <mailto:[email protected]>> 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.
is exactly like you say :) Esteban > > .. whatever. > > Esteban > >> >> On Tue, Nov 8, 2016 at 1:54 PM Esteban Lorenzano <[email protected] >> <mailto:[email protected]>> wrote: >>> On 8 Nov 2016, at 12:49, Dimitris Chloupis <[email protected] >>> <mailto:[email protected]>> 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 <[email protected] >>> <mailto:[email protected]>> 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 <[email protected] >>> > <mailto:[email protected]>> 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.
