Pointer to Object Questions
Jarrett Billingsley
kb3ctd2 at yahoo.com
Sat Dec 30 17:15:06 PST 2006
"John Kiro" <johnkirollos at yahoo.com> wrote in message
news:en6pvm$23fk$1 at digitaldaemon.com...
> Speaking about casting, there is usually a need to cast a reference to an
> integer & vice-versa; I'm specifically pointing to the case of using a
> function
> like the Win32 API function SetWindowLong(), in order to link a window
> with a
> corresponding object. Here is how I did it:
>
> //Linking view window to view obj:
> SetWindowLong(hwndView,0,cast(uint)(cast(CView*)this));
>
> //retrieve the object given the window handle:
> cast(CView)cast(CView*)GetWindowLong(hwndView,0);
>
> Casting to void* instead of CView* also compiled without errors.
>
> So is this the usual way of doing such thing? I mean double casting?
> Because casting an object to int or vice-versa is rejected by the
> compiler.
Yes. Though you should use the
cast(uint)cast(void*)this
form, as this is the more generally accepted way. It makes it obvious that
you're getting the pointer value of the reference, compared to
cast(uint)cast(CView*)this
Since 'this' is of type CView, casting CView to CView* doesn't really make
sense, but casting to void* does -- it says "I want a raw pointer."
More information about the Digitalmars-d-learn
mailing list