Hello!
I started experimenting with Julia<->C interface and found out that it
seems to be hard to pass a struct defined in C to a callback function
defined in Julia as follows:
type ab_struct
a::Cint
b::Cdouble
end
function const_ab_struct(a_::Cint, b_::Cdouble, c_::Ptr{ab_struct})
c_ref = unsafe_pointer_to_objref(c_)
c_ref.a = a_
c_ref.b = b_
return 0
retval::Cint
end
const c_const_ab_struct = cfunction(const_ab_struct, Cint, (Cint, Cdouble,
Ptr{ab_struct}))
ccall( (:testme_ab_callback, "my_lib"), Void, (Ptr{Void},),
c_const_ab_struct)
In "my_lib" dynamic library I have
typedef struct {
int a;
double b;
} ab_struct;
void testme_ab_callback(int (*fun)(int, double, ab_struct*))
{
ab_struct foo;
fun(1,0.5,&foo);
printf("%i, %f\n", foo.a, foo.b);
}
This will yield segfault (seemingly) from c_ref.a=a_ (I'm using osx 10.10
and julia version 0.3.5 installed from .dmg)
Am I doing something wrong (which is a more probable than..)? Is this kind
of struct-callback construct possible to implement (cleanly)?
Thanks,
Juhani