[gelöst] Programm beendet sich gleich wieder ...
-
Servus,
kann mir bitte jemand sagen warum dieses Programm sich sofort wieder beendet ?
Rückgabewert ist 0, also keine Syntaxfehler.#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); char szAppName[ ] = "IDE"; HINSTANCE hInstance ; HINSTANCE hSciLexer ; #define ID_SCINTILLA 1 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { HWND hWnd ; MSG nMsg ; WNDCLASSEX WndClass ; WndClass.hInstance = hInstance ; WndClass.lpszClassName = szAppName ; WndClass.lpfnWndProc = WndProc ; WndClass.style = CS_HREDRAW | CS_VREDRAW ; WndClass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; WndClass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; WndClass.hCursor = LoadCursor (NULL, IDC_ARROW) ; WndClass.lpszMenuName = szAppName ; WndClass.cbClsExtra = 0 ; WndClass.cbWndExtra = 0 ; WndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH) ; if (!RegisterClassEx (&WndClass)) { MessageBox(hWnd, "The window class could not be registered.", szAppName, MB_OK | MB_ICONERROR) ; return 0 ; } hWnd = CreateWindowEx (0, szAppName, szAppName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, 644, 475, NULL, NULL, hInstance, NULL) ; ShowWindow (hWnd, nCmdShow) ; UpdateWindow (hWnd) ; while (GetMessage (&nMsg, NULL, 0, 0)) { TranslateMessage(&nMsg) ; DispatchMessage(&nMsg) ; } return nMsg.wParam ; } LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hWndEdit ; hSciLexer = LoadLibrary("SciLexer.DLL") ; if (hSciLexer == NULL) { MessageBox(hWnd, "The Scintilla DLL could not be loaded.", "Error loading Scintilla", MB_OK | MB_ICONERROR) ; return -1 ; } switch (message) { case WM_CREATE : hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "Scintilla", "", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 10, 500, 400, hWnd,(HMENU) ID_SCINTILLA, hInstance, NULL) ; return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hWnd, message, wParam, lParam) ; }Seid bitte nicht zu streng mit mir, ich bin noch Anfänger ...

Vielen Dank für die Aufmerksamkeit.
Gruß
Greenhorn
-
hSciLexer = LoadLibrary("SciLexer.DLL") ; if (hSciLexer == NULL) { MessageBox(hWnd, "The Scintilla DLL could not be loaded.", "Error loading Scintilla", MB_OK | MB_ICONERROR) ; return -1 ; }Evtl. liegts an dieser stelle hier im code, dass wenn hier nämlich das return
-1, kommt kein return DefWindowProc mehr kommen kann. Sprich er findet deine DLL nicht, du solltest das auch besser in die WM_CREATE paacken sonst wird das nämlich bei jedem Durchlauf deiner WindowProc ausgeführt. Obwohl wenn das fehlschlägt eigentlich ne Messagebox kommen müsste?
Naja packs einfach mal in die WM_CREATE.Gruß Tobi.
-
Hi,
ich habe gerade mit deinem Quellcode ein bissle rumgespielt und bin zum ergebnis gekommen das dein Fenster nicht regisriert werden konnte:if (!RegisterClassEx (&WndClass)) { MessageBox(hWnd, "The window class could not be registered.", szAppName, MB_OK | MB_ICONERROR) ; return 0 ; }Dein Programm hüpft hier in den If-Teil hinein zeigt aber die MessageBox ned an, da "hWnd" ja keine gültiger Handle zu einem Fenster ist.
Würdeste ja erst hier zuweisen:hWnd = CreateWindowEx (0, szAppName, szAppName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, 644, 475, NULL, NULL, hInstance, NULL) ;Also einfach da mal "NULL" angeben und schon müsste die MessageBox erscheinen.
Was aber jetzt an deinem WndClass falsch ist ka sorry.
Ich hab mal GetLastError() ausgewertet:
Error Nr: 87 Text: Falscher ParameterMFG PinguGroup
-
Danke für den Tip, aber das hatte ich zuerst auch so, mit dem gleichen Ergebnis.
Selbst wenn ich den WM_CREATE-Zweig leer lasse passiert das Gleiche ...... oO
sehe gerade die zweite Antwort ...
Ja, das habe ich mir schon gedacht, das es an der WndClass liegt, aber warum ... ?
Sehr merkwürdig *frust*Gruß
-
Tatsache, mit der NULL klappt's auch mit dem Nachbarn, aber leider das falsche Fenster

Ich werde die Nase noch mal in den Petzold stecken ...
-
Also, wenn ich anstatt WNDCLASSEX und RegisterClassEx nun WNDCLASS und RegisterClass nehme, dann geht alles seinen Gang.

Liegt es vielleicht an meiner IDE ?
Ich benutze Code::Blocks v8.0.2 ...Gruß
-
Ahhh, ich hab's.
Bei WNDCLASSEX fehlte der Parameter
WndClass.cbSize = sizeof (WNDCLASSEX);Tja, der gute Petzold ist ja auch schon etwas in die Jahre gekommen ...

Die ganzen *Ex Funktionen sind mir neu, oder besser gesagt nicht im Buch - jedenfalls nicht alle -Jetzt läuft's, vielen Dank noch einmal an euch beiden für die Hilfe !!!
Gruß
C++Greenhorn