Benutzer mit den meisten Antworten
CreateWindowEx schlägt mit Release-Konfiguration fehl

Frage
-
Ich erstelle mein Fenster folgendermaßen:
if(!(m_hWnd = CreateWindowEx(WS_EX_APPWINDOW,m_pApplicationName,m_pApplicationName,WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_POPUP,posX,posY,screenWidth,screenHeight,NULL,NULL,m_hInstance,NULL))) { MessageBox(NULL,"Fehler beim Erstellen des Fensters!","Fehler",MB_OK|MB_ICONWARNING); }
m_pApplicationName ist zugewiesen, die Positionen auch und m_hInstance ist mit GetModuleHandle(NULL) implementiert.
Das Problem ist, dass im Release-Build das Fenster nicht erstellt wird (m_hWnd = NULL)
Im Debug-Modus funktioniert das aber einwandfrei. Sobald ich die Linkcode-Zeitgenerierung ausschalte im RElease funktioniert es auch dort.GetLastError liefert "Der Vorgang wurde erfolgreich beendet".
Ich weiß echt nicht mehr weiter was ich machen soll und hoffe jmd kann mir helfen.
Antworten
-
Und pAppName ist ein gültiger zeiger.
Debugge doch mal und kontrolliere alle Zeiger der Strukturen.
Wie ich das sehe hast Du in der WNDCLASSEX hIconSm nichtinitialisiert!
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 25. September 2012 08:17
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 26. September 2012 06:59
Alle Antworten
-
1. Du kannst auch in der Release Version debuggen.
2. Probleme zwischen Debug und Release Version werden meistens durchnicht initialisiereVariablen ausgelöst.
3. Zeige uns mehr Code, vor allem von allen Parametern.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
-
Also dass keine Missverständnisse auftreten, mit Debug-Modus meinte ich Debug-Build, hab was verwechselt.
Variablen hab ich alle relevanten auf 0 gesetzt->keine Lösung.
Hier mal der Code von InitializeWindows:
struct FIREBASE_API ConfigInfo { LPCSTR pAppName; /**<Name des Fensters*/ bool bFullscreen; /**<Gibt an, ob Vollbild(true) oder Fenstermodus(false). Bei true werden screenWidth und screenHeight ignoriert.*/ int screenWidth; /**<Breite des Fensters*/ int screenHeight; /**<Höhe des Fensters*/ int posX; /**<X-Wert der Fensterposition*/ int posY; /**<Y-Wertder Fensterposition*/ };
// m_cfg ist vom Typ ConfigInfo
WNDCLASSEX wc; DEVMODE dmScreenSettings; int screenWidth=0,screenHeight=0, posX=0,posY=0; g_pApplicationHandle = this; m_hInstance = GetModuleHandle(NULL); m_pApplicationName = m_cfg.pAppName; wc.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = m_hInstance; wc.hIcon = LoadIcon(NULL,IDI_WINLOGO); wc.hIconSm = wc.hIcon; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = m_pApplicationName; wc.cbSize = sizeof(WNDCLASSEX); if(!RegisterClassEx(&wc)) { MessageBox(NULL,"Fenster konnte nicht registriert werden!","Fehler",MB_OK|MB_ICONWARNING); } screenWidth = GetSystemMetrics(SM_CXSCREEN); screenHeight = GetSystemMetrics(SM_CYSCREEN); if(m_cfg.bFullscreen) { memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); dmScreenSettings.dmSize = sizeof(dmScreenSettings); dmScreenSettings.dmPelsWidth = (unsigned long)screenWidth; dmScreenSettings.dmPelsHeight = (unsigned long)screenHeight; dmScreenSettings.dmBitsPerPel = 32; dmScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN); posX=posY=0; } else { screenWidth = m_cfg.screenWidth; screenHeight = m_cfg.screenHeight; posX = m_cfg.posX; posY = m_cfg.posY; } if(!(m_hWnd = CreateWindowExA(WS_EX_APPWINDOW,m_pApplicationName,m_pApplicationName,WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_POPUP,posX,posY,screenWidth,screenHeight,NULL,NULL,m_hInstance,NULL))) { MessageBox(NULL,"Fehler beim Erstellen des Fensters!","Fehler",MB_OK|MB_ICONWARNING); } ShowWindow(m_hWnd,SW_SHOW); SetForegroundWindow(m_hWnd); SetFocus(m_hWnd); ShowCursor(false); return;
-
Und pAppName ist ein gültiger zeiger.
Debugge doch mal und kontrolliere alle Zeiger der Strukturen.
Wie ich das sehe hast Du in der WNDCLASSEX hIconSm nichtinitialisiert!
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 25. September 2012 08:17
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 26. September 2012 06:59
-
Den Release-Build-Debug kann man vergessen, statt 0x0000000 steht irgendeine Adresse, die Werte sind vollkommen anders, etc.
hIconSm ist nun mit LoadIcon(NULL,IDI_WINLOGO) intiailisiert -> kein Erfolg. Der Rest dürft passen, hier das Programm:
#include "../FireBase/FireBase.h" using namespace FireBase; System* g_pSystem = NULL; bool Update(); int WINAPI WinMain(HINSTANCE hI,HINSTANCE hP, char* pcCmd, int iCmd) { g_pSystem = new System; if(!g_pSystem) { MessageBox(NULL,"Fehler bei der Speicherallokation für FireBase::System","Fehler",MB_OK|MB_ICONWARNING); return 1; } ConfigInfo cfg; ZeroMemory(&cfg,sizeof(ConfigInfo)); cfg.bFullscreen = false; cfg.pAppName = "FireBase Engine Test"; cfg.posX = 0; cfg.posY = 0; cfg.screenHeight = 600; cfg.screenWidth = 800; if(!g_pSystem->Initialize(cfg)) { MessageBox(NULL,"Fehler beim Initialisieren des Systems","Fehler",MB_OK|MB_ICONWARNING); FB_DELETE(g_pSystem); return 1; } g_pSystem->Run(Update); g_pSystem->Shutdown(); FB_DELETE(g_pSystem); return 0; } bool Update() { if(g_pSystem->GetInput()->IsKeyDown(VK_ESCAPE)) return false; return true; }
- Bearbeitet birdfreeyahoo Dienstag, 18. September 2012 16:26
-
-