![]() |
AW: switch, break, case c++
Achtung Syntaxfehler:
"WCHAR * Buffer[5];" soll/muss zu 99,9% "WCHAR Buffer[5]" heißen! Du willst ja sicher 4Zeichen + abschließende "NULL" darin speichern(LB_GETTEXT)... dazu brauchst du ein eigentlich "ArrayOfWChar" und kein "ArrayOfWCharPointers"... das es funktioniert liegt daran, 5 Pointer zufällig mehr Speicher reservieren wie du für 5Zeichen brauchst und du dann irgendwie auch noch passend einen "cast" machst. Denke mal drüber nach und versuche zu verstehen, warum es obwohl falsch doch in diesem Fall so funktioniert... :) |
AW: switch, break, case c++
Zitat:
aber da wir schon dabei sind. Ist es überhaupt nötig ein Default: Case im switch (wpItem) bei WM_COMMAND zu verwenden? sollte eigentlich am ende der WinProc reichen. gruss |
AW: switch, break, case c++
ja das "default" im "wpItem" ist notwendig, weil das andere "default" von da aus nicht mehr erreicht werden kann.
Lass bei "*BUFF[5]" bitte trotzdem mal das Sternchen weg und ändere das auf "BUFF[5]". Als allgemeiner guter Tip für C Anfänger bei über 95% der "normalen" Variablen Definition: - (Char,...) Arrayvariablen, also TYPE x[size] werden fast immer ohne * definiert ! (also immer zuerst ohne versuchen und möglichst verstehen warum es (nicht) geht) - mit Sternchen "TYPE* x[size]" oder als "PTYPE x[size]" was dann ein ArrayOfTypePointers entspricht arbeiten auch Pointerfanatiker in C/C++ nur wirklich selten und es kommt z.B. bei WINAPI kaum vor... (hier ist es im aktuellen Fall schwerer zu verstehen warum es obwohl falsch doch wegen genug Speicherreservierung doch geht) |
AW: switch, break, case c++
Zitat:
Habe es gemacht und kompiliert ohne Probleme. gruss |
AW: switch, break, case c++
keine Ursache:)
im Gegensatz zu dir beschäftige mich mit grafischer oder hier solcher Detailarbeit eigentlich im Alltag garnicht mehr. Ich bin da selbst schon echt zu faul dafür geworden. Obwohl für mein erstes großes C-Style WinApi 16Bit-Programm was damit jetzt sogar 64Bit fähig würde... da würde ich am liebsten mal wirklich die alten 16Bit WinApi(v3.11) Quelltexte von 1994..1998 hervorsuchen und das "1:1 mal fix" von 16Bit hoch auf 64Bit portieren... einzig bin ich nicht mehr bei der damaligen Firma und nur für NiceToHave ist mir meine Zeit eben dann wohl doch zu schade:( Aber ev. kann auch von dir was noch lernen... wenn du magst schicke mir ne PM(du hast die PM-Empfangsfunktion selbst ja deaktivert)... "Meinen Quelltext der DLL SK_AERO gibt es NUR auf persönlicher Anfrage. Das Teil ist nicht geheim, aber habe einiges an Zeit dafür investiert" Egal ob Delphi,C,API,SDK oder was auch immer, ich lese gerne in fremden Quelltexten und meckere wenn dann nur sachlich begründet einzelne mir aufgefallene Details "nett" an:) |
AW: switch, break, case c++
Zitat:
Aber dieser ist in Delphi geschrieben nicht in C++ Das C++ Project habe ich nur für die KVideoPlayer_x64.dll geschrieben.. weil diese MadVR und LAVFilter unterstützt. Vielleicht braucht das ja mal jemand. Habe dich zu meinen Kontakten addiert. Schick mir ne Mail.. Habe jetzt noch den Vollbildmodus umgeschrieben.
Code:
case ID_FULLSCREEN: if (KVideo_GetPlayerState() != psNotReady) ToggleFullScreen(); break;
Code:
void ToggleFullScreen()
{ static DWORD screenWidth, screenHeight; static RECT rcSaved; long nTop = 0; gP.bFullScreen = !gP.bFullScreen; if (gP.bFullScreen) { // Wechseln in den Vollbildmodus. GetWindowRect(gP.hMain, &rcSaved); rcSaved.right = GetSystemMetrics(SM_CXSCREEN); rcSaved.bottom = GetSystemMetrics(SM_CYSCREEN); SetWindowLongPtr(gP.hMain, GWL_STYLE, WS_POPUP); AdjustWindowRect(&rcSaved, WS_POPUP, FALSE); SetWindowPos(gP.hMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_SHOWWINDOW); HMONITOR hMonitor = MonitorFromWindow(gP.hMain, MONITOR_DEFAULTTONEAREST); MONITORINFO tmi; ClearMemory(&tmi, sizeof(tmi)); tmi.cbSize = sizeof(tmi); RECT rw; GetWindowRect(gP.hMain, &rw); GetMonitorInfo(hMonitor, &tmi); screenWidth = abs(Width(tmi.rcMonitor)); screenHeight = abs(Height(tmi.rcMonitor)); long ctrlpanelHeigh = 97; nTop = GetSystemMetrics(SM_CYMENU); rw.left = tmi.rcMonitor.left; rw.top = tmi.rcMonitor.top - nTop; rw.right = screenWidth; rw.bottom = screenHeight + nTop + ctrlpanelHeigh; MoveWindow(gP.hMain, rw.left, rw.top, rw.right, rw.bottom, TRUE); KVideo_Resize(); } else { // Zurück zum Fenstermodus. SetWindowLongPtr(gP.hMain, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE); MoveWindow(gP.hMain, rcSaved.left, rcSaved.top, dpi(XMIN_SIZE), dpi(YMIN_SIZE), FALSE); KVideo_Resize(); } } gruss |
AW: switch, break, case c++
Mensch72 hat das schon ausführlich und richtig erklärt.
Bin mir nicht sicher ob das erwähnt wurde (habe mit jetzt nicht Alles durchgelesen): Zitat:
Delphi-Quellcode:
Rollo
switch(x)
{ case 1: Code1; break; // --> Springt raus case 2: Code2; break; // --> Springt raus case 3: Code3; // --> Läuft weiter zur nächsten Anweiseung (4) case 4: Code4; break; // --> Springt raus default: Code5; } // Bei 3 --> Code3 ... Code4 // Bei 4 --> Code4 // // Das entspräche in etwa in Pascal (leider nicht ganz so): case (expression) of 1 : Code1; 2 : Code2; 3, 4: Code3_4; // So verhält sich das in Pascal, leider nicht ganz so wie in C else Code5; end; // Bei 3 --> Code3_4 // Bei 4 --> Code3_4 // //--> Da muss ich in Code3_4 nochmal checken ob es jetzt aus 3 oder 4 kommt |
AW: switch, break, case c++
Na ja mich interessiert weniger wie es unter Delphi abläuft das ist ja bekannt.
Mein Unverständnis liegt/lag darin das es kein festgelegte Definition gibt wie ein Break gesetzt werden muss. Ist halt nicht das gleiche wie
Delphi-Quellcode:
gruss
X:
begin result := 0; exit; // nicht gleich break; end; |
AW: switch, break, case c++
Du kannst das break überall im Code eines case-Zweigs setzten - du kannst theoretisch auch mehrere breaks an unterschiedlichen Stellen haben. Ob dabei jetzt irgendwelche Klammern (Scopes) verwendet werden oder nicht macht fürs break keinen Unterschied!
Du kannst dir das so ähnlich vorstellen wie ein Exit in Delphi - das kannst du überall innerhalb einer Funktion haben, es spring immer ans Ende der Funktion (finally Blöcke ignorieren wir mal). Ein break in einem case spring immer ans Ende des switch. Wenn dir der Debugger dazwischen noch bei irgendwelchen anderen break Zeilen stehen bleibt kannst du das ignorieren - das hängt mit dem generierten Code zusammen, macht aber keinen semantischen Unterschied. |
AW: switch, break, case c++
Zitat:
Danke. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz