WndProc verwirrt



  • 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?


Anmelden zum Antworten