On 4 August 2014 12:37, Thomas Bany <mun.sysdev@gmail.com> wrote:
Hi everyone !I experience troubles with NBExternalStructure in NativeBoost when the structure modeled contains fields with different types. For example, manipulating the following structure poses no problem and I can manipulate the fields correctly:typedef struct abc_s {double a;double b;double c;} abc;However, setting field 'a' to be an int yields the following symptoms:�� �� From Pharo to C (function with 'abc' as argument type), the fields are badly read.�� �� From C to Pharo (function with 'abc' as return type), the VM crash without an error nor a dump.Am I doing something wrong or is it maybe specific to the compiler I use (the one that comes with Visual Studio Express 2013) ?��This caused by wrong alignment of structure in memory. Different compilers can align structures differently, and there's no way to know it at run time.
Try to change the #byteAlignment of the structure.
Also, if nothing helps, you can use dummy fields for padding fields, like in your example:
int a;
int dummy;
double b;
double c;
��I'm pretty sure I could go arround this using NBExternalObject and building the structure on C side, but it would be nice to avoid it.On a side note, my understanding is that creating a structure on Pharo side will have it stored in Pharo memory. Is it problematic when it comes to pass it by value ? Or should I manage the copying on the C heap to be safe ?Thomas.
--
Best regards,
Igor Stasenko.