Probleme mit GUI-Wrapper und Dev-C++ 5.4 (TDM-GCC 4.7.1)
-
Hi erstmal,
ich versuch gerade, einen GUI-Wrapper unter Dev-C++ 5.4 zum Laufen zu bekommen.
Hier der Code:
static LRESULT CALLBACK StandardWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { CWindowObject* pWnd; if (uMsg == WM_NCCREATE) { ::SetWindowLong(hWnd, GWL_USERDATA, (long) ((LPCREATESTRUCT(lParam))->lpCreateParams)); } pWnd = (CWindowObject*)GetWindowLong(hWnd, GWL_USERDATA); if (pWnd) { pWnd->SetWindowMessages(hWnd, uMsg, wParam, lParam); } return pWnd->DefUserWindowProc(hWnd, uMsg, wParam, lParam); }
Fehlermeldungen:
[Error] 'GWL_USERDATA' was not declared in this scope
[Error] cast from 'LPVOID {aka void*}' to 'long int' loses precision [-fpermissive]Mit dem Embarcadero C++ Compiler funktionierte das, warum nicht mit Dev-C++? Was muss man aendern?
-
Fehler 1:
Benutze SetWindowLongPtr. SetWindowLong ist veraltet und deswegen taucht GWL_USERDATA wohl nicht mehr in deinem Windows Header auf.Fehler 2:
Ich nehme mal an, du kompilierst für 64bit, daher würde der Cast von einem Pointer (8 Byte) zu einem long (4 Byte) zum Datenverlust führen, der zweite Fehler ist also berechtigt. Mit meiner Empfehlung im ersten Fehler löst sich das Problem.
-
Der erste Fehler ist weg, der zweite blieb aber noch.
-
Ich nochmal...
Ich konnte den zweiten Fehler beheben, indem ich statt "long" "int64_t" genommen hab. Wenn ich jetzt aber das Programm ausfuehren will, bleibt das Programm stecken.
-
Das wird ein anderer Fehler sein und ohne Fehlermeldung, Code-Beispiel und/oder Erklärung kann dir nicht geholfen werden.
-
LPCTSTR GetClassName() { return m_ClassName; } ... m_WindowClass.lpszClassName = GetClassName();
Das Programm bleibt wegen GetClassName stecken, warum?