The first three parameters to ccall are special and are eval'd at compile
time. To get the effect you are looking for, declare the return type as
Ptr{Void}, and then call `convert(ret_type, ptr)`


On Tue, Mar 11, 2014 at 11:57 AM, J Luis <[email protected]> wrote:

> I want to parameterize the return type of a ccall call that otherwise will
> return a pointer to void. So I tried
>
>
> function create_data(API::Ptr{None}, family, geometry, mode, par,
>         wesn::Ptr=C_NULL, inc::Ptr=C_NULL, reg=0, pad=2, data::Ptr{Void}=
> C_NULL)
>
>     if (family == GMT_IS_VECTOR)
>         ret_type = Ptr{GMT_VECTOR}
>     elseif (family == GMT_IS_IMAGE)
>         ret_type = Ptr{GMT_IMAGE}
>     else
>         ret_type = Ptr{None}
>     end
>
>     ptr = ccall((:GMT_Create_Data,lib), ret_type, (Ptr{None}, Uint32,
> Uint32, Uint32, Ptr{Uint64},
>         Ptr{Cdouble}, Ptr{Cdouble}, Uint32, Cint, Ptr{None}),
>         API, uint32(family),uint32(geometry),uint32(mode),par,wesn,inc,
> uint32(reg),int32(pad), data)
> end
>
> but it errors saying that ret_type is not defined.
>
> julia> V = create_data (API, 5, 1, 0, dim)
> ERROR: ret_type not defined
>
> How come that it's 'not defined' ?????
>
>

Reply via email to