MultilineEditBox zeilenweise behandeln
-
merker schrieb:
Allerdings gibt es ein Problem, falls die Zeichenkette zufällig 0x0100 Zeichen lang ist.
Ist bei Verwendung von Multi-Byte natürlich korrekt, wenn das Low-Byte des Words 0 ist, funktioniert das nicht - bei Wide-Char allerdings kein Problem.
Allerdings ist deine Lösung mit den int auch nicht ganz das 'saubere', wenn dynamische Allocierung von szBuffer verwendet wird.
LPTSTR szBuffer = (LPTSTR)LocalAlloc(LPTR, (nLineLength + 1) * sizeof(TCHAR));Man weis ja nie, ob sich im Speicher hinter dem angelegten Puffer noch benötigte Daten befinden.
Denke mal eine sauber Lösung wäre folgende:if(nLineLength) { *((LPWORD)szBuffer) = (WORD)nLineLength; SendMessage(hwe, EM_GETLINE, (WPARAM)i, (LPARAM)szBuffer); } *(szBuffer + nLineLength) = '\0';Einwände?
-
Schön übersichtlich die Lösung. Aber da könnte der Kompiler Ärger machen :
Ein "lvalue" (hier : szBuffer) soll/kann/darf nicht gecastet werden.
-
Dieser Cast ist erlaubt.
Der Zeiger auf die Adresse in die geschrieben werden soll, wird letztendlich das lvalue, nicht das Resultat aus dem Pointercast.
'Aufgelöst' würde das so aussehen:LPDWORD lpdw = (LPWORD)szBuffer; *(lpdw) = (WORD)nLineLength;Nicht erlaubt wäre dieser Cast:
((WORD)*szBuffer) = (WORD)nLineLength;