An Array is not compatible with a julia method expecting a Ptr; it can
only be passed to a ccall that expects a Ptr. In julia Array and Ptr
are just different types. I would recommend not writing julia methods
with ::Ptr arguments. Another reason is that if you pass Ptrs around
too much you risk hiding objects from the GC.

On Mon, Mar 10, 2014 at 9:50 PM, J Luis <[email protected]> wrote:
> Still doesn't work but getting closer
>
> julia> using GMT; API=create_session(); dim=uint64([2,9]);
>
> julia> V = create_data (API, 5, 1, 0)
> Ptr{Void} @0x0000000000000000
>
> julia> V = create_data (API, 5, 1, 0, dim)
> ERROR: no method create_data(Ptr{None}, Int64, Int64, Int64,
> Array{Uint64,1})
>
> so its the 'dim' parameter that is causing the error now. Isn't the
> dim=uint64([2,9]); compatible with par::Ptr=C_NULL (nor the before
> par::Ptr{Culonglong})?
>
>
>
> Terça-feira, 11 de Março de 2014 1:31:50 UTC, Leah Hanson escreveu:
>>
>> I think Jacob was suggesting something like this:
>>
>> function create_data(API::Ptr{None}, family=5, geometry=1, mode=0,
>> par::Ptr=C_NULL,
>>         wesn::Ptr=C_NULL, inc::Ptr=C_NULL, reg=0, pad=2,
>> data::Ptr{None}=C_NULL)
>>
>>
>> Have you tried that? (The Ptr types are loosened by removing the type
>> parameter).
>>
>> -- Leah
>>
>>
>> On Mon, Mar 10, 2014 at 8:23 PM, J Luis <[email protected]> wrote:
>> >
>> > Thanks, but if I try without default values
>> >
>> > function create_data(API::Ptr{None}, family, geometry, mode,
>> > par::Ptr{Culonglong},
>> >         wesn::Ptr{Cdouble}, inc::Ptr{Cdouble}, reg, pad,
>> > data::Ptr{None})
>> >
>> > I still get the same error, and note that the Culonglong was not using
>> > the C_NULL default value before. It's the 'dim' parameter below.
>> >
>> > using GMT; API=create_session(); dim=uint64([2,9]);
>> >
>> >
>> > julia> V = create_data (API, 5, 1, 0, dim, C_NULL, C_NULL, 0, 0, C_NULL)
>> > ERROR: no method create_data(Ptr{None}, Int64, Int64, Int64,
>> > Array{Uint64,1}, Ptr{None}, Ptr{None}, Int64, Int64, Ptr{None})
>> >
>> >
>> >
>> >
>> > Terça-feira, 11 de Março de 2014 0:29:32 UTC, Jacob Quinn escreveu:
>> >>
>> >> Not sure, but my guess would be that C_NULL is not being accepted as a
>> >> Ptr{Culonglong} or Ptr{Cdouble} since it's type is Ptr{Void} (or 
>> >> Ptr{None}).
>> >> You can either remove those type annotations or just use Ptr as the type
>> >> annotation to test this theory.
>> >>
>> >> -Jacob
>> >>
>> >>
>> >> On Mon, Mar 10, 2014 at 8:20 PM, J Luis <[email protected]> wrote:
>> >>>
>> >>> I have spend some hours around this but I'm not getting nowhere. The
>> >>> following C function has this signature
>> >>>
>> >>> void *GMT_Create_Data (void *API, unsigned int family, unsigned int
>> >>> geometry,
>> >>>                         unsigned int mode, uint64_t par[], double
>> >>> *wesn,
>> >>>                         double *inc, unsigned int registration, int
>> >>> pad, void *data)
>> >>>
>> >>>
>> >>> A Clang.jl conversion produced
>> >>>
>> >>> @c Ptr{None} GMT_Create_Data (Ptr{None}, Uint32, Uint32, Uint32,
>> >>> Ptr{Culonglong}, Ptr{Cdouble},
>> >>>         Ptr{Cdouble}, Uint32, Cint, Ptr{None}) gmt_w64
>> >>>
>> >>> than I manually try to replicate it so that I can use default values,
>> >>> and I wrote it as
>> >>>
>> >>> function create_data(API::Ptr{None}, family=5, geometry=1, mode=0,
>> >>> par::Ptr{Culonglong}=C_NULL,
>> >>>         wesn::Ptr{Cdouble}=C_NULL, inc::Ptr{Cdouble}=C_NULL, reg=0,
>> >>> pad=2, data::Ptr{None}=C_NULL)
>> >>>
>> >>>     ptr = ccall((:GMT_Create_Data,lib), Ptr{None}, (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
>> >>>
>> >>> However, no matter what I try the manual version always error
>> >>>
>> >>> julia> V = create_data (API, 5, 1, 0, dim, C_NULL, C_NULL, 0, 0,
>> >>> C_NULL)
>> >>> ERROR: no method create_data(Ptr{None}, Int64, Int64, Int64,
>> >>> Array{Uint64,1}, Ptr{None}, Ptr{None}, Int64, Int64, Ptr{None})
>> >>>
>> >>> or
>> >>>
>> >>> julia> create_data(API)
>> >>> ERROR: no method create_data(Ptr{None}, Int64, Int64, Int64,
>> >>> Ptr{None}, Ptr{None}, Ptr{None}, Int64, Int64, Ptr{None})
>> >>>  in create_data at C:\progs_cygw\GMTdev\julia\GMT\src\GMTfuns.jl:22
>> >>>
>> >>> but the automatic one runs fine
>> >>>
>> >>>
>> >>> julia> V = GMT_Create_Data (API, 5, 1, 0, dim, C_NULL, C_NULL, 0, 0,
>> >>> C_NULL)
>> >>> Ptr{Void} @0x0000000000216210
>> >>>
>> >>>
>> >>> What am I doing wrong?
>> >>>
>> >>> Thanks
>> >>
>> >>

Reply via email to