I compiled the DLL using Visual Studio 2015 Community Edition. Later I will check with mingw.
2016-07-05 14:58 GMT+02:00 Merwan Ouddane <[email protected]>: > Using codeblocks, mine are: > > mingw32-g++.exe -m32 -DBUILD_DLL -c main.cpp -o obj\Release\main.o > mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def > -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o > bin\Release\Test.dll -s -m32 > > > On Tue, Jul 5, 2016 at 2:52 PM, Merwan Ouddane <[email protected]> > wrote: > >> I am not moving from another plateform :/ >> >> I tried it in pharo 6 and I it didn't work either. >> >> It could be my dll. What is your compilation line for the dll ? >> >> Thanks you, >> Merwan >> >> On Tue, Jul 5, 2016 at 2:14 PM, Ronie Salgado <[email protected]> >> wrote: >> >>> 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 >>>> >>> >>> >> >
