Hi,

   could be the problem that you are using the same external array for both
xm and ym?.
The clone message just creates a shallow copy of the external array.
It does not allocates a new external array, it only copies the address in
both xm and ym.

You should better do something like this:

xm :=  FFIExternalArray externalNewType: 'float' size: 2.
ym := FFIExternalArray externalNewType: 'float' size: 2.

Cheers.

On Mon, Nov 26, 2018 at 9:30 AM Yuriy Babah <babah.yuri...@gmail.com> wrote:

> Hi !
>
> I'm trying to call a very simple function from C ++ lib, writed for the
> test.
> function with prototype:
>
> extern "C" float interpolationFunc(float* xm, float* ym, int size, float
> x).
>
> In Pharo7 wrote:
> FFIExamples class >> interpolationFunc_xm: xM ym: yM size: size x: x
>     ^ self ffiCall: #(float interpolationFunc #(float * xM , float * yM ,
> int size , float x)) module: 'libinterpolationLib.so'
>
> in Playground i'm doing:
> xm :=  FFIExternalArray externalNewType: 'float' size: 2.
> ym := xm clone.
> #(2 3) doWithIndex: [:each :i | xm at: i put: each].
> #(3 4) doWithIndex: [:each :i | ym at: i put: each].
> FFIExamples interpolationFunc_xm: xm pointer ym: ym pointer size: 2  x:
> 2.5 .
>
> last expression returninп me 0.0, but right is 3.5.
>
> I'm dit the same in Python3 ctypes, and there work's fine.
>
> In UnifiedFFI booklet is absent chapter "Arrays", anybody may help with
> whot i'm doing wrong?
>


-- 
Pablo Tesone.
teso...@gmail.com

Reply via email to