Thanks, works beautifully.

Terça-feira, 11 de Março de 2014 13:15:31 UTC, Jameson escreveu:
>
> 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] 
> <javascript:>>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