Einzelnen Beitrag anzeigen

freimatz

Registriert seit: 20. Mai 2010
1.482 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Alter Assembler Code

  Alt 17. Feb 2025, 08:46
Das assembler-Schlüsselwort ist zwar seit Jahrzehnten nicht mehr nötig, aber egal,
und sonst funktioniert dieser Code eigentlich immernoch (Delphi 12).
Ja, aber nicht mit Win64
Was heißt fehlt?
Die Funktion selbst ist weg, also im Turbopower, nicht im Delphi, oder wie?
Ja genau. Die ist einfach nicht mehr drin.

Du hast sie ja noch, also warum nicht einfach kopieren und in eigene Unit?
Wegen Win64

Seit vielen Jahren gibt es die Unit AnsiStrings, bzw. inzwischen System.AnsiStrings, in welcher sich seit 2009 die ANSI-Versionen vieler Funktionen aus z.B. SysUtils verstecken.
Ja, verwende ich auch häufig.

Durch die Variable wird der Code etwas aufgebläht, aber Hauptsache es geht.
Delphi-Quellcode:
// würde auch mit Win64 funktionieren
function LoCase(C: AnsiChar): AnsiChar;
var
  P: array[0..1] of AnsiChar;
begin
  P[0] := C; // PWideChar(@P)^ := WideChar(C {and #$00FF});
  P[1] := #0;
  Result := CharLowerA(@P)[0]; // Result := Winapi.Windows.CharLowerA(@P)[0];
end;
Danke. Das hilft.
Geschwindigkeit ist hier sicher kein Problem. Es muss nicht mehr mit 4.77Mhz laufen wie damals.

oder
Delphi-Quellcode:
function LoCase(C: AnsiChar): AnsiChar;
begin
  Result := System.AnsiStrings.LowerCase(C)[1];
end;
Du meinst das ist identisch? Verwendet die auch CharLowerA? Wenn ich es richtig lese konvertiert System.AnsiStrings.LowerCase nur ASCII

Geändert von freimatz (17. Feb 2025 um 08:49 Uhr)
  Mit Zitat antworten Zitat