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
>>>>
>>>
>>>
>>
>

Reply via email to