What I found is if, for simplification, I restrict the type to (that is
without type assignment)
type tCTC_l
iup_canvas
end
than it works. But if I change it to
type tCTC_l
iup_canvas::Ptr{cdCanvas}
end
it errors again. For curiosity I tried also
type tCTC_l
iup_canvas::Int64
end
and now
t => Ptr{cdCanvas} @0x0000000021c3f4a0
ctgc_l.iup_canvas => 566490272
ERROR: `cdActivate` has no method matching cdActivate(::Int64)
that is, it converted the Ptr{cdCanvas} (the 't') to Int64, so it seams
that in the first instance it converted one Ptr{cdCanvas} to another
Ptr{cdCanvas} ending up with TWO declarations of the Ptr{cdCanvas}.
Does it make any sense?
quarta-feira, 14 de Janeiro de 2015 às 17:50:51 UTC, J Luis escreveu:
>
> Yes, an synthetic example would be nice, but I strongly suspect that if I
> was able to create one than it would because I had found the problem.
>
> quarta-feira, 14 de Janeiro de 2015 às 16:15:20 UTC, Milan Bouchet-Valat
> escreveu:
>>
>> Le mercredi 14 janvier 2015 à 07:42 -0800, J Luis a écrit :
>> > Well, I can make the current (failing) code available in the IUP repo
>> > but to run it implies installing the IUP lib, and IUP.jl which
>> > probably no one tested in other than Windows.
>> But the problem does not seem to involve IUP (or via a nasty memory
>> corruption bug). You should be able to reproduce it with a short
>> artificial example.
>>
>>
>> Regards
>>
>> > quarta-feira, 14 de Janeiro de 2015 às 15:30:20 UTC, Milan
>> Bouchet-Valat escreveu:
>> > Le mercredi 14 janvier 2015 à 06:54 -0800, J Luis a écrit :
>> > > I already fall in those two forms of troubles (double
>> definition and
>> > > double inclusion of the file where the type is defined) so
>> I'm aware
>> > > of it. As much as I can tell with grepping, that is not
>> occurring
>> > > now.
>> > > Maybe a third (unknown to me) form of this type of issue?
>> > Would you be able to create a reproducible example?
>> >
>> >
>> > Regards
>> >
>> > > quarta-feira, 14 de Janeiro de 2015 às 14:41:56 UTC, Keno
>> Fischer
>> > > escreveu:
>> > > Are you maybe accidentally defining cdCanvas twice or
>> in two
>> > > different modules?
>> > >
>> > > On Wed, Jan 14, 2015 at 3:40 PM, J Luis <
>> [email protected]>
>> > > wrote:
>> > > BTW, if that matters, 'ctgc' is a global
>> variable.
>> > >
>> > > quarta-feira, 14 de Janeiro de 2015 às
>> 14:37:05 UTC, J
>> > > Luis escreveu:
>> > > Hi, thanks for looking into this.
>> > >
>> > > If I make them show, as
>> > >
>> > > @show ctgc.iup_canvas
>> > > ctgc.iup_canvas = t
>> > > @show t
>> > > @show ctgc.iup_canvas
>> > >
>> > > it 'shows'
>> > >
>> > > ctgc.iup_canvas => Ptr{cdCanvas}
>> > > @0x0000000000000000
>> > > t => Ptr{cdCanvas}
>> @0x0000000022c6d6c0
>> > > ctgc.iup_canvas => Ptr{cdCanvas}
>> > > @0x0000000022c6d6c0
>> > >
>> > > which shows that type has not changed
>> after
>> > > the attribution and that it has the
>> correct
>> > > return type of cdCreateCanvas().
>> > > That is why I initialized the ctgc
>> type with
>> > >
>> > > convert(Ptr{cdCanvas},0)
>> > >
>> > > (see first member in my first post)
>> > >
>> > >
>> > > quarta-feira, 14 de Janeiro de 2015
>> às
>> > > 13:39:21 UTC, Milan Bouchet-Valat
>> escreveu:
>> > > Le mercredi 14 janvier 2015 à
>> 05:32
>> > > -0800, J Luis a écrit :
>> > > > Hi,
>> > > > I have had quite some
>> head-aches
>> > > with types (converted from C
>> structs)
>> > > > but this one wins.
>> > > >
>> > > > I have this type (from IUP)
>> > > >
>> > > >
>> > > > type tCTC
>> > > >
>> iup_canvas::Ptr{cdCanvas}
>> > > > w::Cint
>> > > > h::Cint
>> > > > ...
>> > > >
>> > > > which I initialize as
>> > > >
>> > > > ctgc = tCTC(
>> > > >
>> convert(Ptr{cdCanvas},0),
>> > > > int32(0), int32(0),
>> > > > ...
>> > > >
>> > > > and now the mystery.
>> > > >
>> > > > t =
>> > >
>> cdCreateCanvas(cdContextIup(),
>> > > IupGetHandle("cnvMain"))
>> > > > ctgc.iup_canvas = t
>> > > > cdActivate(t);
>> > > >
>> cdActivate(ctgc.iup_canvas);
>> > > >
>> > > >
>> > > > the last line in the chunk
>> above
>> > > errors with
>> > > >
>> > > >
>> > > > ERROR: `cdActivate` has no
>> method
>> > > matching
>> cdActivate(::Ptr{cdCanvas})
>> > > > in CDTestInit at
>> C:\programs\Gits
>> > >
>> \IUP.jl\examples\cdtest_.jl:125
>> > > > in cdtest at
>> C:\programs\Gits
>> > >
>> \IUP.jl\examples\cdtest_.jl:92
>> > > >
>> > > >
>> > > > So `t` and
>> `ctgc.iup_canvas` are
>> > > actually two different
>> entities
>> > > > (although their pointers
>> are ofc the
>> > > same as I can see if I @show
>> > > > them)?
>> > > Well, you need to show us
>> more
>> > > details, e.g. tell us what
>> > > cdCreateCanvas() does, and
>> what type
>> > > it returns. The pointers
>> might hold
>> > > the same address, but they
>> still may
>> > > be of different types. @show
>> should
>> > > make this visible, but
>> without the
>> > > output we cannot check.
>> > >
>> > >
>> > > Regards
>> > >
>> > >
>> > >
>> >
>>
>>