Hi Merwan, I tested this on Pharo 6 and it is working in Windows. However, in 32 bits Window doubles have an 8 byte alignment, unlike Linux where they have a 4 byte alignment.
Can you try doing the following before performing the ffi call in Windows, if you are moving an image from Linux or OS X: Vec3 rebuildFieldAccessors. Position rebuildFieldAccessors. Best regards, Ronie 2016-07-05 11:11 GMT+02:00 Merwan Ouddane <[email protected]>: > Hi, > > I have an issue whith nested structures. > > I made some "dummy" structures in c: > > > typedef struct vec3 { > double data[3]; > } vec3; > > typedef struct position { > int i; > vec3 vec; > } position; > And a "dummy" function to fill it: > void fillStruct(position *position) > { > position -> i = 19; > (position -> vec).data[0] = 1; > (position -> vec).data[1] = 2; > (position -> vec).data[2] = 3; > } > > But I can't make the nested structure work. > The "i" is correctly set to 19 but I have values that doesn't make any > sense in the vec3 structure. > > In Pharo > I declared the Double3 type for the array inside Vec3: > Double3 := FFITypeArray ofType: 'double' size: 3 > > Vec3>>fieldsDesc > ^ #( > Double3 v; > ) > > And the position: > Position>>fieldsDesc > ^ #( > int i; > Vec3 vec; > ) > > The ffi call: > ^ self ffiCall: #(void fillStruct(Position *position)) module: 'Test.dll' > > Sorry for the long / messy mail :p > > Any clues ? > > Cheers, > Merwan >
