[squeak-dev] FFI Array of Structs

Beckmann, Tom Tom.Beckmann at student.hpi.uni-potsdam.de
Sat Jan 30 19:46:47 UTC 2016


Dear Squeak devs,

I'm trying to send an array of structs to a C library via FFI.
Scenario would look about as follows:

struct my_struct {
    float a;
    float b;
};
void myFunction(struct my_struct *list, int count);

So far I always failed at the point of "arguments could not be coerced" when trying to use a stamp like this:

apiMyFunction: anArray num: aNumber
  <apicall: void 'myFunction' (MyStruct* long) module: 'mylib.so'>

with MyStruct being an ExternalStructure with
#((a 'float') (b 'float'))
as its >>fields class method.

The open question is now how to call this from squeak code, failed attempts so far include:

- ​an "Array" with the MyStruct classes ("could not coerce arguments")
- a custom ArrayedCollection subclass ("could not coerce arguments"), even though I wasn't quite sure whether I implemented it correctly
- a custom ExternalData subclass "MyStructArray", passing an empty instance leads to a segfault, I'm not sure how I would fill it (<apicall: void 'myFunction' (MyStructArray long) module: 'mylib.so'>)

Any help is appreciated!

Regards
Tom


More information about the Squeak-dev mailing list