cast class references to void and back
BLS
nanali at nospam-wanadoo.fr
Tue Sep 18 02:07:41 PDT 2007
BLS schrieb:
>
> From the D spec;
>
> Pointer Conversions
> Casting pointers to non-pointers and vice versa is allowed in D,
> however, do not do this for any pointers that point to data allocated by
> the garbage collector.
>
> Given :
> Class CWin : CMsg
> {
> Cwin pWnd = null; // create a refrence
>
> /* C++
> pWnd =
> reinterpret_cast<CWin*>((long)((LPCREATESTRUCT)lParam)->lpCreateParams);
> */
>
> // D probabely
> pWnd = cast(CWin)(cast(LPCREATESTRUCT)lParam).lpCreateParams;
>
> }
>
> The LPCREATESTRUCT from WinUser.d
> struct CREATESTRUCTA {
> LPVOID lpCreateParams; // Here I am
> HINSTANCE hInstance;
> HMENU hMenu;
> HWND hwndParent;
> // etc.
> }
> alias CREATESTRUCTA* LPCREATESTRUCTA;
>
> So :
> 1) Do I have to put a cast(int) in there (where the (long) was in C++)
> The reason you would use 'int' and not 'long' is that long in C++ is
> typically 32 bits and long in D is 64 bits.
>
> 2) I'm not 100% certain that it is guaranteed to work if you cast class
> references to void and back again. Someone else might be able to
> confirm/deny this.
> 3) Following the D spec. this is also not guaranteed to work.
> confirm/deny ?
>
> Thanks in advance
> Bjoern
Still someone out there who is still mental health ? 'cause const
discussion :-)
In this case just another question,
In case that I define
Class CWnd
{
CWnd* pWnd = 0;
}
Do I have then in fact CWin** (from a C++ view) ?
More information about the Digitalmars-d
mailing list