Hi,

> On 26 Nov 2018, at 09:28, 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 .

This is incorrect. “xm” and “ym” are already pointers (references)
When you pass "xm pointer” you are actually passing a pointer to a pointer (a 
float** in this case) 

This looks better:

FFIExamples 
        interpolationFunc_xm: xm getHandle
        ym: ym getHandle
        size: 2  
        x: 2.5 .

Still, you need to do something with those arrays after using them, since you 
are creating them with externalNewType:… (which mean it allocates the memory 
space).
You will need to send #free to them. 
Other solution would be to not use #externalNewType:size: but plain 
#newType:size:

Cheers, 
Esteban

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

Reply via email to