J
Folgende is ein ausschnitt von mein win32 wrapper
LRESULT CALLBACK WindowBase::WndProc(HWND hWnd, ZUINT uMsg, WPARAM wParam, LPARAM lParam) {
WindowBase* pWnd = NULL;
if (uMsg == WM_NCCREATE) {
pWnd = reinterpret_cast<WindowBase*>( ( (LPCREATESTRUCT) lParam )->lpCreateParams );
LONG_PTR nUserData = reinterpret_cast<LONG_PTR>(pWnd);
::SetWindowLongPtr(hWnd, GWLP_USERDATA, nUserData);
}
LONG_PTR test = ::GetWindowLongPtr(hWnd, GWL_USERDATA);
//pWnd = (WindowBase*) test; beide variante funktionieren erstmal
pWnd = (WindowBase*) &test;
if (pWnd)
return pWnd->EventHandler(hWnd, uMsg, wParam, lParam);
else
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}
also es funktionieren beide variante, deshalb bin ich ein bisschen verwirrt, kann mir das jemand erklaeren.
bei debuggen sehe ich genau folgendes
&test 0x0021F150 long*
test 0x0021F154 long
ich hatte gedacht &test wuerde hier crashen, aber es funktioniert, nicht erwartet. kann mir jemand das erklaeren?