On Saturday, February 8, 2014 2:21:36 PM UTC-5, Carlos Becker wrote:
> I tried out many ways of passing arrays and other objects from C back to
> Julia.
> So far it seems that it takes a lot of extra code if I want to return, for
> example, a simple double-array or an array of types (eg structs)
>
This should be quite easy. For example, return a double array, just
allocate a double* array in C with malloc, and return it along with the
size (if needed), then convert it to a Julia array with pointer_to_array on
the Julia side. If you want Julia to take charge of freeing the array
when you are done with it, pass own=true to pointer_to_array. For example:
in C:
double *myarray(int n)
{
double *a = malloc(sizeof(double) * n);
for (int i = 0; i < n; ++i) a[i] = i;
return a;
}
in Julia:
myarray(n) = pointer_to_array(ccall((:myarray,"mylib"), Ptr{Float64},
(Cint,), n), n, true)
To return an array of structs, do the same thing, except instead of Float64
in Julia declare a custom immutable type that mirrors the C struct.