Vera hat folgendes geschrieben: |
bin halt noch sehr neu bei dem thema delphi.
warum funktioniert dann der folgende code bei mir? Also ohne #0 anzuhängen und später wieder zu löschen?
Delphi-Quelltext 1: 2: 3: 4:
| function Ansi2OEM(AnsiString: string): string; begin result := CharToOEM(@ANSIString[1], @ANSIString[1]); end; |
|
Thread ist zwar alt, aber die Antwort:
AnsiStrings (=string) sind Hybridstrings, die sowohl ihre Länge speichern, als auch nullterminiert sind. Die #0 ist also immer am Ende vorhanden, außer der string ist leer. Daher ist es besser PChar(S) zu verwenden, da wenn der string leer ist, @S[1] auf nil zeigt (es gibt kein erstes Zeichen).
Also am Besten so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| function Ansi2OEM(const S: string): string; begin Result := S; CharToOEM(PChar(Result), PChar(Result)); end; |
P.S. AnsiString ist ein schlechter Variablenname da es auch ein Typ ist.
P.P.S: Das Dein Code funktioniert hat wundert mich übrigens, denn CharToOEM liefert ein BOOL zurück, daher sollte Result := CharToOem nicht funtionieren (result ist ja ein string).