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.

Reply via email to